Я использую CompareNetObjects для автоматического тестирования моей системы.Это было полезно для обеспечения того, чтобы оптимизация производительности не изменила ожидаемое поведение системы, а также не допускала ошибок.
Когда у меня есть коллекция, объявленная абстрактным образом, я ожидаю, что ее содержимоепо сравнению, а не сама коллекция;однако я не вижу возможности включить это.
Класс:
public class MustBeCorrect
{
public string Name { get; set; }
IEnumerable<string> Items { get; set; }
}
Тест:
[Fact] void IsCorrect()
{
var obj1 = new MustBeCorrect
{
Name = "Kitty",
Items = new string[]
{
"Collar",
"Bell"
}
};
var obj2 = new MustBeCorrect
{
Name = "Kitty",
Items = new List<string>
{
"Collar",
"Bell"
}
};
comparer.Compare(obj1, obj2); // False!
}
Два вышеупомянутых объекта сравниваются как не равные, дажехотя единственное различие между этими двумя объектами состоит в том, что один использует массив, а другой - список.Однако, с точки зрения моего контракта, эти двое кажутся мне одинаковыми.
Как настроить параметры сравнения только для сравнения содержимого коллекций, а не самой коллекции?