我發現自己需要大量的這種邏輯的最近: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