Dot-Net

NUnit 中是否存在 Has-Only-One 約束?

  • October 18, 2018

我發現自己最近需要很多這種邏輯:

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

我看到 NUnit 提供Has.SomeHas.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 第一個選項對我來說讀起來更好,但後者可能會根據您的喜好給出更好的異常消息。

引用自:https://stackoverflow.com/questions/3814685