Мы написали тест, который выглядит следующим образом. Этот тест требует, чтобы мы создали en Equal
-overload для CodeTableItem
-класса:
ICollection<CodeTableItem> expectedValutaList = new List<CodeTableItem>();
expectedValutaList.Add(new CodeTableItem("DKK", "DKK"));
expectedValutaList.Add(new CodeTableItem("EUR", "EUR"));
RepoDac target = new RepoDac();
var actual = target.GetValutaKd();
CollectionAssert.AreEqual(expectedValutaList.ToList(),actual.ToList());
Тест работает нормально, но имеет неудачную зависимость от Equality
-функции, что означает, что если я расширю CodeTableItem
-класс еще одним полем и забуду расширить Equals
-функцию, модульный тест по-прежнему будет работать зеленым, хотя мы не тестируем для всех полей. Мы хотим избежать этого Equality
загрязнения (см. Test Specific Equality), которое было написано только соответствовать тесту.
Мы пробовали использовать OfLikeness
и переписали тест следующим образом:
ICollection<CodeTableItem> expectedValutaList = new List<CodeTableItem>();
expectedValutaList.Add(new CodeTableItem("DKK", "DKK"));
expectedValutaList.Add(new CodeTableItem("EUR", "EUR"));
var expectedValutaListWithLikeness =
expectedValutaList.AsSource().OfLikeness<List<CodeTableItem>>();
RepoDac target = new RepoDac();
ICollection<CodeTableItem> actual;
actual = target.GetValutaKd();
expectedValutaListWithLikeness.ShouldEqual(actual.ToList());
Но тест не проходит, потому что Capacity
не равно. Я написал код, который многократно проходит через рефлексию, и, как правило, в конечном итоге реализовал перегрузки для игнорирования полей. Есть ли способ игнорировать определенные поля с OfLikeness
или ShouldEqual
? Или есть другой способ решить эту проблему?