我在C#中有很多方法可以返回我想测试的各种集合。我想尽可能少地使用测试API--性能并不重要。一个典型的例子是:如何在c#中创建涉及集合的单元测试?
HashSet<string> actualSet = MyCreateSet();
string[] expectedArray = new string[]{"a", "c", "b"};
MyAssertAreEqual(expectedArray, actualSet);
// ...
void MyAssertAreEqual(string[] expected, HashSet<string> actual)
{
HashSet<string> expectedSet = new HashSet<string>();
foreach {string e in expected)
{
expectedSet.Add(e);
}
Assert.IsTrue(expectedSet.Equals(actualSet));
}
我有根据集合是否是数组,列表,ICollections等来写一个数字签名是否有转变这简化了这个(例如,将一个数组转换为一个Set?)。
我也需要为我自己的班级做这个。我为他们实现了HashCode和Equals。它们(主要)从MySuperClass(比如说)分类。是否有可能实现的功能:
void MyAssertAreEqual(IEnumerable<MySuperClass> expected,
IEnumerable<MySuperClass> actual);
,这样我可以致电:
IEnumerable<MyClassA> expected = ...;
IEnumerable<MyClassA> actual = ...;
MyAssertAreEqual(expected, actual);
,而不是写本,每类
它不应该Enumerable.SequenceEqual而不是IEnumerable? – Michael 2009-07-30 07:20:04
@Michael:这是一个扩展方法,所以你可以使用`seqA.SequenceEqual(seqB)`。注意你需要使用`OrderBy(...)`进行有意义的比较(你关心元素的存在,而不是关于顺序),这是非常重要的*。 – 2009-07-30 07:25:48