我想用FSUnit(特別是它的Xunit分支)來測試F#中兩個集合的平等,但迄今爲止發生了可怕的失敗。用FSUnit.Xunit測試集合
我有一個函數返回特定結構的數組,並且想要測試返回的數組是否正確。我正在測試的代碼是在C#中,所以它的功能無法返回本機F#列表。
最有前途的方法我試過是以下幾點:
[<Fact>]
let SimpleTest() =
let parser = new ExpressionParser()
parser.ParseExpression "2" |> should equal [new ParsedItem("2", ParsedItemType.Value)]
...但它導致了測試,因爲失敗:
"Message> FSUnit.Xunit+MatchException: Exception of type 'FsUnit.Xunit+MatchException' was thrown.
Expected value: Equals [(2)]
Actual: was [2]
我可以看到,這是因爲原生F#列表的類型與本地數組不匹配,但不知道(我在文檔中找不到任何東西)如何以不同的方式執行此操作(除非事先創建本地數組並逐個填充它)。
我也嘗試了一些其他的方法,但他們通常甚至不會編譯。 PS:我對F#和Xunit都是全新的,所以我可能會錯過一些絕對明顯的東西。
編輯:,實際工作更好地在評論(比較,而不是對象的字符串表示自己)認爲,雖然我將使用在我實際的代碼,我仍然希望真正解決我的問題上面的一種解決方法。
不是我有一個答案,但可能會幫助其他人看這個。是使用XUnit的一個要求還是你可以改變使用NUnit? –
我可以在沒有任何問題的情況下更改爲NUnit,但更喜歡FSUnit本機解決方案。 – Petrroll
是否有任何理由不能將結構轉換爲可打印格式並比較可打印格式或編寫自定義比較函數並調用該函數。我所從事的一個項目使用了帶有NUnit的FSUnit,並且我們以打印的形式對AST進行了大量比較。請參閱[測試](https://github.com/jack-pappas/fsharp-logic-examples/blob/master/FSharpx.Books.AutomatedReasoning.Tests/equal.fs) –