У меня есть несколько методов на C #, которые возвращают различные коллекции, которые я хочу протестировать. Я хотел бы использовать как можно меньше тестовых API - производительность не важна. Типичный пример:
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 и т. Д. Существуют ли преобразования, упрощающие это (например, для преобразования массива в набор?).
Мне также нужно сделать это для моих собственных классов. Я реализовал для них HashCode и Equals. Они (в основном) являются производными от (скажем) MySuperClass. Можно ли реализовать функционал:
void MyAssertAreEqual(IEnumerable<MySuperClass> expected,
IEnumerable<MySuperClass> actual);
так что я могу позвонить:
IEnumerable<MyClassA> expected = ...;
IEnumerable<MyClassA> actual = ...;
MyAssertAreEqual(expected, actual);
вместо того, чтобы писать это для каждого класса