.net NUnit中最惯用的方法是在集合上声明等长
NUnit2.6最惯用的断言两个集合长度相等的方式是什么,而不管它们的元素值是什么 我可以看到几种表达这种主张的方式。哪一个是首选的,或者使用其中一个是否有缺点/优点.net NUnit中最惯用的方法是在集合上声明等长,.net,unit-testing,collections,nunit,assert,.net,Unit Testing,Collections,Nunit,Assert,NUnit2.6最惯用的断言两个集合长度相等的方式是什么,而不管它们的元素值是什么 我可以看到几种表达这种主张的方式。哪一个是首选的,或者使用其中一个是否有缺点/优点 Assert.That(coll1, Has.Count.EqualTo(coll2.Count)); Assert.That(coll1.Count, Is.EqualTo(coll2.Count)); Assert.AreEqual(coll1.Count, coll2.Count); 我可以看到,第一个选项在断言失败的情况
Assert.That(coll1, Has.Count.EqualTo(coll2.Count));
Assert.That(coll1.Count, Is.EqualTo(coll2.Count));
Assert.AreEqual(coll1.Count, coll2.Count);
我可以看到,第一个选项在断言失败的情况下提供了很好的输出(预期计数…但实际得到…),而其他两个选项仅输出“预期…,实际…”,除非我通过附加参数提供自定义消息。我认为这确实是个人偏好,但对于我来说:
Assert.That(coll1.Count(), Is.EqualTo(coll2.Count()));
使用linq并且如果基础集合/可枚举类型发生更改,它在大多数情况下仍然有效,您不需要测试类型,只需要测试计数。这也适用于没有的东西。例如,对IDBSet
进行计数。但是我也没有发现有任何问题。AreEqual
也没有任何问题。如果下一个工程师明白了,那他就是赢家了,嗯?我更喜欢:
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));
两者读起来几乎相同,但第一个失败时,需要检查的逻辑更少
更新:2020年12月1日
考虑到已经收到的投票数,我想我应该提到使用(FA)是有利的。这可以用以下方式书写,并且读起来更好:
// Arrange
// Act
var list = GetList();
// Assert
list.Should().BeEmpty();
或
或
除了OP问题,FA还可以执行一些非常高级的收集规则:
// Arrange
// Act
var persons = GetPersons();
// Assert
persons.Should().BeInAscendingOrder(p => p.LastName)
.And().OnlyHaveUniqueItems(p => p.id);
该框架超越了集合,并为测试其他主题增加了可读性
// Arrange
// Act
Action action = () => 8 / 0;
//
action.Should().Throw<DivideByZeroException>();
//排列
//表演
动作动作=()=>8/0;
//
action.Should().Throw();
我与流畅的断言毫无关联
// Arrange
// Act
var persons = GetPersons();
// Assert
persons.Should().BeInAscendingOrder(p => p.LastName)
.And().OnlyHaveUniqueItems(p => p.id);
// Arrange
// Act
Action action = () => 8 / 0;
//
action.Should().Throw<DivideByZeroException>();