在我的C#單元測試中,我經常查詢基於ID列表的行列表。然後,我想確保1)對於所有ID,至少有一行具有該ID,2)對於所有返回的行,每行都有一個ID,該ID位於要查找的ID列表中。這裏是我通常確保:C#單元測試中的雙向列表比較
我覺得用Any
和All
方便這種檢查,但我想看看是否有人認爲,這是不易閱讀比它可能是,或有也許這是一種更好的雙向檢查方式。我在Visual Studio 2008 Team System中使用MSTest進行單元測試。這可能應該是社區wiki,如果它太主觀。
編輯:現在我正使用基於阿維亞德P.的建議的解決方案,同時又有以下測試通過的事實:
string[] ids1 = { "a", "b", "c" };
string[] ids2 = { "b", "c", "d", "e" };
string[] ids3 = { "c", "a", "b" };
Assert.AreEqual(
1,
ids1.Except(ids2).Count()
);
Assert.AreEqual(
2,
ids2.Except(ids1).Count()
);
Assert.AreEqual(
0,
ids1.Except(ids3).Count()
);
這看起來不錯,我喜歡我只寫一次'x [primaryKey]'。不過,考慮到如何描述Except,我認爲它應該是Count()== 0。 – 2010-01-04 20:09:01
實際上,您需要保持> 0,但交換消息。修改我的答案。 – 2010-01-04 20:10:40
爲什麼你需要'> 0'?我希望在檢索到的結果ID列表和我查詢的ID列表之間沒有區別。智能感知將「Except」描述爲產生「兩個序列的集合差異」。 – 2010-01-04 20:18:41