NUnit中是否存在Has-Only-One约束?

lad*_*dge 7 .net nunit unit-testing

我发现自己最近需要很多这样的逻辑:

Assert.That(collection.Items, Has.Member(expected_item));
Assert.That(collection.Items.Count(), Is.EqualTo(1));
Run Code Online (Sandbox Code Playgroud)

我看到NUnit的提供Has.Some和Has.All,但我没有看到像什么Has.One.没有两个断言,最好的方法是什么?

Bub*_*rap 10

你可以尝试这样的事情:

Assert.AreEqual(collection.Items.Single(), expected_item);
Run Code Online (Sandbox Code Playgroud)

Single将返回集合中的唯一项目,如果它不包含正好1项,则抛出异常.

我对NUnit并不熟悉,所以有人可能会提供一个更好的解决方案,确实使用NUnit函数......

编辑:快速搜索后,唯一似乎接近的NUnit函数是Is.EquivalentTo(IEnumerable):

Assert.That(collection.Items, Is.EquivalentTo(new List<object>() {expected_item}));
Run Code Online (Sandbox Code Playgroud)

IMO第一个选项对我来说更好,但后者可能会根据您的偏好提供更好的异常消息.


Seb*_*lls 2

从 NUnit 2.6 开始(不在提出这个问题时):

Assert.That(collection.Items, Has.Exactly(1).EqualTo(expected_item));
Run Code Online (Sandbox Code Playgroud)

Has.Exactly“对集合中的每个项目应用约束,如果指定数量的项目成功,则成功。” [1]

  • 我认为这无法根据 OP 原始代码检查该集合是否总共只有一项。 (4认同)