По существу, Assert.AreEqual
использует Object.Equals()
для проверки равенства между фактическим и ожидаемым экземпляром, тогда как Assert.AreSame
использует Object.ReferenceEquals
.
Если ваш класс не реализует какой-либо встроенный механизм равенства; например, переопределив Object.Equals
, вы столкнетесь с проблемой, которую вы описали, потому что MbUnit не знает, как сравнивать два экземпляра тестируемого типа.
Есть несколько решений. Одним из них является решение Coppermill: вы можете захотеть внедрить устройство сравнения структурного равенства на основе рефлексии. Но у MbUnit уже есть встроенная функция , подобная этой . Он называется StructuralEqualityComparer<T>
и им очень легко пользоваться. Так зачем изобретать велосипед?
Assert.AreSame(RawDataRow, result, new StructuralEqualityComparer<MyDataRow>
{
{ x => x.CentreID },
{ x => x.CentreLearnerRef, (a, b) => a.Equals(b, StringComparison.OrdinalIgnoreCase) },
{ x => x.ContactID },
// You can customize completely the comparison process...
});
В любом случае, я предлагаю вам прочитать эту статью: http://interfacingreality.blogspot.com/2009/09/equality-assertions-in-mbunit-v3.html
Вы также можете прочитать эту статью в вики Gallio.