我想用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) –