使用NUnit 2.6来判断两个集合长度相等而不管它们的元素值是什么,最恰当的方式是什么?
我可以看到表达这种断言的几种方式.哪一个是优选的,或者使用一个或另一个有缺点/优点?
Assert.That(coll1, Has.Count.EqualTo(coll2.Count)); Assert.That(coll1.Count, Is.EqualTo(coll2.Count)); Assert.AreEqual(coll1.Count, coll2.Count);
我可以看到第一个选项提供了一个很好的输出,以防断言失败(预期计数...但实际上得到...),而其他两个选项只输出"Expected ...,actual ......"除非我通过附加参数提供自定义消息.
我更喜欢:
Assert.That(collection, Has.Count.EqualTo(expectedCount));
只是因为.Count
并且Count()
可能被错误地覆盖(如果它们应该在不同的单元测试中进行测试,尽管我不知道nunit实际上是如何在内部进行计数的).基本上我不希望我的实际有任何副作用逻辑.呼叫Count
或Count()
应该在以下行为中进行:
// Arrange var expectedCount = 8; // Act var list = GetList(); var actualCount = list.Count(); // Assert Assert.That(actualCount, Is.EqualTo(expectedCount));
两者读得相当相同,但第一个在失败时查看的逻辑较少.