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

时间:2010-09-28 15:58:15

标签: .net unit-testing nunit

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

Assert.That(collection.Items, Has.Member(expected_item));
Assert.That(collection.Items.Count(), Is.EqualTo(1));

我看到NUnit提供了Has.SomeHas.All,但我没有看到Has.One之类的内容。如果没有两个断言,最好的方法是什么?

5 个答案:

答案 0 :(得分:10)

您可以尝试这样的事情:

Assert.AreEqual(collection.Items.Single(), expected_item);

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

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

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

Assert.That(collection.Items, Is.EquivalentTo(new List<object>() {expected_item}));

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

答案 1 :(得分:3)

怎么样

Assert.IsTrue(collection.Items.Count() == 1 && collection.Items.Contains(expected_item));

为什么它不适合你?

答案 2 :(得分:2)

从NUnit 2.6开始(当问到这个问题时不是这样):

Assert.That(collection.Items, Has.Exactly(1).EqualTo(expected_item));

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

答案 3 :(得分:1)

我认为验证集合中是否只有一项的最佳方法是 ,它验证条件是执行以下操作:

Assert.That(collection.Items, Has.Count.EqualTo(1).And.All.EqualTo(expected_item));

这样可以在发生故障时获得最佳的错误消息。 第二种最好的方法是@BubbleWrap的编辑答案,它可以执行断言工作,但是无论您的收藏中有多个项目还是该项目不是预期的项目,都会出现相同的错误。

答案 4 :(得分:-1)

如果Items属性有索引器,则可以使用


Assert.AreEqual(collection.Items[0], expected);