2010-09-28 73 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

相關問題