您如何看待以下断言?
Assert.IsTrue(condition1 && condition2);
我在审查会议期间提出了这种类型的断言。据我所知,在断言中使用 && 运算符不是一个好习惯。我想知道其他人是怎么想的?值得一提的是,这是下一次审查会议中的一个问题吗?还是只是个人喜好?
您如何看待以下断言?
Assert.IsTrue(condition1 && condition2);
我在审查会议期间提出了这种类型的断言。据我所知,在断言中使用 && 运算符不是一个好习惯。我想知道其他人是怎么想的?值得一提的是,这是下一次审查会议中的一个问题吗?还是只是个人喜好?
当你写
Assert.IsTrue(condition1 && condition2);
然后不清楚是什么导致测试失败 - 第一个或第二个条件。因此,您需要将它们都true
一个接一个地检查:
Assert.IsTrue(condition1);
Assert.IsTrue(condition2);
现在让我们想想 OR 条件有什么问题:
Assert.IsTrue(condition1 || condition2);
这看起来像随机测试 - 它会在不同的情况下通过:
那么,您正在检查什么场景?创建三个不同的场景来重现这三种情况。每个测试将包含两个断言,例如对于最后一个场景:
Assert.IsFalse(condition1);
Assert.IsTrue(condition2);
这取决于上下文。
Assert.IsTrue(condition1 && condition2);
当然可以用 2 个单独Assert
的 s 替换,但是怎么样
Assert.IsTrue(condition1 || condition2);
当这恰好是有效的测试结果时,我认为它没有问题。
因此,当 2 个条件在逻辑上相关时,请使用&&
.
当它们是 2 个或多或少独立的结果时,使用 2 个断言调用。
如果条件不相关,那么我会做出两个断言。但你的技术对
Debug.Assert(str != null && str.Length == 10);
因为那不会抛出,因为
Debug.Assert(str != null);
Debug.Assert(str.Length == 10);
在断言被违反的情况下。
在我看来,单元测试应该测试 1 并且只测试 1 件事。使用 && 似乎与此相反。
如果有多个“概念”或关注领域,那么这并不理想,建议重构为不同的测试,每个概念一个。
或者,如果它只是一些解决逻辑,那么很好。但是 - 提取此逻辑以使其明确这是正在发生的事情,而不是将其放入断言中。
将测试拆分为多个测试是否有意义?