我发现自己最近需要很多这样的逻辑:
Assert.That(collection.Items, Has.Member(expected_item));
Assert.That(collection.Items.Count(), Is.EqualTo(1));
我看到NUnit提供了Has.Some
和Has.All
,但我没有看到Has.One
之类的内容。如果没有两个断言,最好的方法是什么?
答案 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);