2017-02-27 73 views
0

我正在处理的模块包含一个项目列表,并且有一个方法可以根据特定条件查找并返回该列表中的项目。规范规定“...如果发现几个匹配的值,任何一个可能会返回”对任一条件或条件进行单元测试

我想写一些测试与Nunit,我找不到任何东西,让我表达这种情况非常好(即返回的对象必须是A或B,但我不介意哪个)

当然,我可以很容易地编写代码来设置布尔值,以确定结果是否与预期一样,然后执行简单操作断言该布尔值,但是这整个问题让我怀疑这是否是单元测试的“红旗”,以及是否有更好的解决方案。

有经验的单元测试人员通常会如何处理有一系列可接受的输出的情况,而您又不想将测试与某个特定实现联系起来?

回答

1

因为你的问题是相当普遍的形式,我只能给一个相当普遍的答案,但例如...

Assert.That(someObject, Is.TypeOf<A>().Or.TypeOf<B>()); 
Assert.That(someObject, Is.EqualTo(objectA).Or.EqualTo(objectB)); 
Assert.That(listOfValidOjects, Contains.Item(someObject)); 

这取决于你要测试的细节。

0

我来自Java,JUnit和参数化测试,但似乎nunit也支持这些(请参阅here)。

人们可以用它来为您的不同变量生成值(并且“生成器”也可以跟踪预期的总体结果)。

使用这种方法,您可能会找到避免对所有可能的输入值组合进行“硬编码”的方法(如:真的生成它们);但至少您应该能够编写代码,将不同输入值的信息与预期结果一起更好地“整合”在您的源代码中。

+0

我认为这个问题并不是很清楚,所以我已经在上面重新描述了它,使其更清晰,因为我没有看到参数化测试会如何帮助我 – Andy