2010-09-28 47 views
6

我发现自己需要大量的这种逻辑的最近:NUnit中是否存在一个只有一个约束?

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

我看到NUnit的提供Has.SomeHas.All,但我没有看到像Has.One东西。如果没有两个断言,最好的方法是什么?

回答

3

在NUnit 2.6(当被问到这个问题不在身边)的:集合中

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

Has.Exactly“适用制约每个项目如果指定数量的项目成功,则成功。“ [1]

10

你可以尝试这样的事:

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第一个选项读更好的给我,但后者可能会给根据自己的喜好更好的异常信息。

+0

很好的答案。我仍然怀疑是否没有隐藏在那个我想要的地方的限制条件,尽管......这似乎很自然,不是吗? – ladenedge 2010-09-28 17:23:31

+0

好吧,不是很自然,因为列表自然包含任何数量的项目,并且如果您期望只有一个项目,它会破坏列表的目的:) – PostMan 2010-09-28 19:28:54

+0

@PostMan - 完全自然并且非常常见的情况是只需要一个项目在_specific_ test场景的列表中(或者一般来说,IEnumerable)。 – 2014-12-17 17:03:24

3

如何

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

为什么它不能满足你吗?

+1

由于测试失败时错误消息较差。如果计数不同于1,或者该集合中没有找到该项目,则错误消息将仅仅是“预期的:真的;但是:假的” - 无法快速查看错误。 – 2014-12-17 17:05:52

0

如果项目属性有一个索引,你可以使用


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

+2

不确认只有一个项目 – PostMan 2010-09-28 16:13:51

+0

你是对的。我错过了。 – 2010-09-28 16:22:46

相关问题