私の C# 単体テストでは、ID のリストに基づいて行のリストを照会することがよくあります。次に、1) すべての ID について、その ID を持つ行が少なくとも 1 つ見つかったこと、および 2) 返されたすべての行について、各行に検索する ID のリストにある ID があることを確認します。これが私が通常それを確認する方法です:
Assert.IsTrue(ids.All(
id => results.Any(result => result[primaryKey].Equals(id))
), "Not all IDs were found in returned results");
Assert.IsTrue(results.All(
result => ids.Any(id => result[primaryKey].Equals(id))
), "Returned results had unexpected IDs");
Any
andの使用はそのようなチェックに便利だと思いますが、All
これは可読性が低いと考える人がいるかどうか、またはこのような双方向チェックを行うためのより良い方法があるかどうかを確認したかったのです。単体テストに Visual Studio 2008 Team System で MSTest を使用しています。あまりにも主観的である場合、これはおそらくコミュニティ wiki である必要があります。
編集:私は現在、Aviad 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()
);