gpt4 book ai didi

.net - NUnit 中在集合上断言相等长度的最惯用的方法

转载 作者:行者123 更新时间:2023-12-04 14:23:29 25 4
gpt4 key购买 nike

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

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

最佳答案

我更喜欢:

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));
两者读起来相当相同,但第一个失败时查看的逻辑较少。
更新:2020 年 12 月 1 日
考虑到收到的赞成票数量,我想我应该提到使用 https://fluentassertions.com/ (FA) 是有利的。这可以用以下方式编写并且读起来更好:
// Arrange

// Act
var list = GetList();

// Assert
list.Should().BeEmpty();
或者
// Arrange

// Act
var list = GetList();

// Assert
list.Should().HaveCount(8);
或者
// Arrange

// Act
var list = GetList();

// Assert
list.Should().HaveCountLessThanOrEqualTo(10);
除了 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>();
我与流畅的断言没有任何关联。

关于.net - NUnit 中在集合上断言相等长度的最惯用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22778483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com