我发现自己需要大量的这种逻辑的最近:NUnit中是否存在一个只有一个约束?
Assert.That(collection.Items, Has.Member(expected_item));
Assert.That(collection.Items.Count(), Is.EqualTo(1));
我看到NUnit的提供Has.Some
和Has.All
,但我没有看到像Has.One
东西。如果没有两个断言,最好的方法是什么?
我发现自己需要大量的这种逻辑的最近:NUnit中是否存在一个只有一个约束?
Assert.That(collection.Items, Has.Member(expected_item));
Assert.That(collection.Items.Count(), Is.EqualTo(1));
我看到NUnit的提供Has.Some
和Has.All
,但我没有看到像Has.One
东西。如果没有两个断言,最好的方法是什么?
在NUnit 2.6(当被问到这个问题不在身边)的:集合中
Assert.That(collection.Items, Has.Exactly(1).EqualTo(expected_item));
Has.Exactly
“适用制约每个项目如果指定数量的项目成功,则成功。“ [1]
你可以尝试这样的事:
Assert.AreEqual(collection.Items.Single(), expected_item);
单将返回集合中的唯一项目,或抛出一个异常,如果它不正好包含1项。
我不是那熟悉的NUnit的,所以有人可能会提供一个更好的解决方案,它使用NUnit的功能...
编辑:快速搜索后,这似乎是唯一的NUnit的功能来关闭是Is.EquivalentTo(IEnumerable)
:
Assert.That(collection.Items, Is.EquivalentTo(new List<object>() {expected_item}));
IMO第一个选项读更好的给我,但后者可能会给根据自己的喜好更好的异常信息。
如何
Assert.IsTrue(collection.Items.Count() == 1 && collection.Items.Contains(expected_item));
为什么它不能满足你吗?
由于测试失败时错误消息较差。如果计数不同于1,或者该集合中没有找到该项目,则错误消息将仅仅是“预期的:真的;但是:假的” - 无法快速查看错误。 – 2014-12-17 17:05:52
如果项目属性有一个索引,你可以使用
Assert.AreEqual(collection.Items[0], expected);
不确认只有一个项目 – PostMan 2010-09-28 16:13:51
你是对的。我错过了。 – 2010-09-28 16:22:46
很好的答案。我仍然怀疑是否没有隐藏在那个我想要的地方的限制条件,尽管......这似乎很自然,不是吗? – ladenedge 2010-09-28 17:23:31
好吧,不是很自然,因为列表自然包含任何数量的项目,并且如果您期望只有一个项目,它会破坏列表的目的:) – PostMan 2010-09-28 19:28:54
@PostMan - 完全自然并且非常常见的情况是只需要一个项目在_specific_ test场景的列表中(或者一般来说,IEnumerable)。 – 2014-12-17 17:03:24