【发布时间】:2012-12-16 05:41:22
【问题描述】:
我正在尝试编写一个单元测试来检查某个结果是否正确。但是,有两个结果被认为是正确的。有没有办法用断言做 OR?我知道我可以做 result = x || result = y 并断言这是真的。但我不想看到真!=假,我想看到结果!= x或y。
我使用的框架是 mstest,但我也愿意听取有关 nunit 的建议。
【问题讨论】:
-
为什么有两个答案被认为是正确的?听起来你有一个你没有控制的输入,你真的应该有两个测试,一个用于每个预期结果(在它是 only 预期结果的条件下)。跨度>
-
@JoeWhite 例如,如果您正在测试排序算法并且规范中不需要稳定性,那么对于特定输入,可能会认为多个输出是正确的。实现可能是确定性的,但您不知道它将如何实现。在我的情况下,规范不够具体(这可能是真正的问题),所以我必须考虑多个正确的输出。
-
在这种情况下,我们所做的就是断言我们的代码得到的特定结果。不稳定的排序仍然是确定性的(除非你是多线程的)。如果您稍后更改算法并且您的测试开始失败,您可以看到行为实际上仍然正确,并更新测试。当然,这使它更像是回归测试而不是单元测试;但另一方面,为技术上正确的输出添加测试,但您实际上不会通过您的实现获得,这是 YAGNI。
标签: c# unit-testing nunit mstest