我必須將MS單元測試轉換爲NUnit並且遇到此斷言。斷言集合中的所有項目都具有使用NUnit的其中一個項目屬性的值
Assert.AreEqual(collection.Select(item => item.location.id).Distinct().Count(), 1);
我希望有一個優雅的方式來寫約束,但我一直沒能找到一個。我的解決辦法是這樣的,但我不是與它高興:
Expect(collection.Select(item => item.location.id).Distinct().Count(), Is.EqualTo(1));
是否有書面聲明,其中的意圖更清晰可讀的更好的辦法? (使用Has.
或Map(collection).
)
編輯2:
我才意識到它可能有助於清楚地陳述的意圖是什麼:
集合中的所有項具有相同的位置ID(不知道該ID是什麼)
E DIT 1:
這是集合可能是什麼樣子的JSON:
[{itemId=1, location={name="A", id=1}},
{itemId=2, location={name="A", id=1}},
{itemId=3, location={name="A", id=1}}]
distinct.count = 1 =>通過
[{itemId=1, location={name="A", id=1}},
{itemId=2, location={name="A", id=1}},
{itemId=4, location={name="B", id=2}}]
distinct.count = 2 =>失敗
編輯3:我的最終解決方案的基礎上,法比奧的回答
IEnumerable<long?> locationIds = collection.Select(item => item.location.id);
Expect(locationIds, Has.All.EqualTo(locationIds.FirstOrDefault()));
您期待所有項目都是唯一的嗎?你能舉一個集合可能是什麼樣子的例子嗎? –
我試圖理解這個斷言的價值,調用.Distinct會自動去除所有重複對象,你的結果將永遠等於1. –
@MoeGhafari好點。事實上唯一的辦法是失敗的是,如果列表是空的,條件將始終成立。 –