哪个集合断言策略与TestCaseSource集合返回值一起使用

时间:2016-12-08 15:51:26

标签: c# unit-testing nunit assertions nunit-3.0

使用nUnit 3.4.1。

使用TestCaseSource新建TestCaseData项目列表时:

new TestCaseData(new [] {"value1", "value2"}).Returns(new [] {"value2", "value1"})

在我的单元测试中,返回一个看起来像输入数据的数组:

new [] {"value1", "value2"}

对于上面显示的Returns值,我得到一个失败的测试,因为我假设nUnit正在使用CollectionAssert.AreEqual,这意味着相同的顺序。

尝试使用TestCaseData初始化中的额外参数和CollectionAssert.AreEquivalent代替,并且有效

我可以自定义该行为吗?

1 个答案:

答案 0 :(得分:1)

行为不可配置。流畅的Returns方法与ExpectedResult的处理方式相同。 NUnit仅检查是否相等。 NUnit code that handles this非常简单,

if (testMethod.HasExpectedResult)
    NUnit.Framework.Assert.AreEqual(testMethod.ExpectedResult, result);

将期望值作为第二个参数传递并使用CollectionAssert.AreEquivalent的解决方法是正确的。 NUnit不会更改ExpectedResult的语义,以允许您使用任意断言。您可能会看到AreEqualAreEquivalent在语义上非常接近,但它们在内部非常不同。