NUnit中最常用的方法是在集合上断言相等的长度

时间:2014-04-01 06:34:19

标签: .net unit-testing collections nunit assert

使用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);

我可以看到第一个选项提供了一个很好的输出,以防断言失败(预期的数量为...但实际得到......),而其他两个选项只输出“预期...,实际.. 。“除非我通过附加参数提供自定义消息。

2 个答案:

答案 0 :(得分:23)

我更喜欢:

Assert.That(collection, Has.Count.EqualTo(expectedCount));

只是因为.CountCount()可能被错误地覆盖(如果它们应该在不同的单元测试中进行测试,尽管我不知道nunit实际上是如何在内部进行计数的)。基本上我不希望我的实际有任何副作用逻辑。调用CountCount()可能应该在以下行为中进行:

// Arrange
var expectedCount = 8;

// Act
var list = GetList();
var actualCount = list.Count();

// Assert
Assert.That(actualCount, Is.EqualTo(expectedCount));

两者读得相当相同,但第一个错误的逻辑可以在失败时查看。

答案 1 :(得分:1)

我认为这是个人偏好,但我会选择:

Assert.That(coll1.Count(), Is.EqualTo(coll2.Count()));

使用linq并且如果底层集合/ Enumerable类型发生了更改,它在大多数情况下仍然可以工作,您不会仅仅计算类型的类型。这也适用于没有.Count的内容,例如IDBSet。但是我再次发现.AreEqual没有任何问题。如果下一位工程师理解那么它就是赢家,嗯?