在我的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