Dot-Net
NUnit 中是否存在 Has-Only-One 約束?
我發現自己最近需要很多這種邏輯:
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);Single 將返回集合中唯一的項目,或者如果它不包含恰好 1 個項目,則拋出異常。
雖然我對 NUnit 不太熟悉,所以有人可能會提供一個更好的解決方案,它確實使用 NUnit 函式……
編輯:快速搜尋後,似乎接近的唯一 NUnit 函式是
Is.EquivalentTo(IEnumerable):Assert.That(collection.Items, Is.EquivalentTo(new List<object>() {expected_item}));IMO 第一個選項對我來說讀起來更好,但後者可能會根據您的喜好給出更好的異常消息。