Как я могу получить NUnit, чтобы быть более точным о том, какие поля не совпадают при сравнении объектов? - PullRequest
4 голосов
/ 06 января 2012

У меня есть 2 объекта (одна рука, созданная мной, и одна из базы), и я пытаюсь убедиться, что они равны Не в том смысле, что они являются одной и той же ссылкой, но данные в них совпадают.

Я использую Assert.AreEqual(), но получаю только общие сообщения об ошибках, такие как.

Expected: <Namespace.ObjectFoo>
But was: <Namespace.ObjectFoo>

Как я могу продолжить, чтобы показать, какие свойства не совпадают?

Ответы [ 5 ]

3 голосов
/ 06 января 2012

Вы можете переопределить Equals, чтобы Asser.AreEqual использовал его.Или сравнивайте каждое свойство одно за другим.

3 голосов
/ 06 января 2012

Добавьте переопределение .ToString() в классе Namespace.ObjectFoo, который описывает содержимое объекта. <Namespace.ObjectFoo> - это результат реализации .ToString(), определенный для System.Object.

1 голос
/ 07 января 2012

Не совсем уверен, как вы собираетесь сравнивать * содержимое * из этих двух объектов с Assert.AreEqual(). Я думаю, что вам нужно ввести в ваш mock объект какой-то Compare метод, который перебирает поля обоих и накапливает, скажем, в некоторых string полях, содержимое которых не совпадает. Вы можете реализовать IComparable, переопределить Equals, реализовать пользовательский метод или любой другой.

После выполнения этого метода Compare у вас будет string с отчетом о данных в нужном формате о полях, где сравнение на равенство не выполнено, если оно есть.

1 голос
/ 07 января 2012

Сделайте так, чтобы objectFoo реализовал icomparable и поместите логику сравнения в метод CompareTo, если вы хотите более детального сравнения тестирования зерна, тогда просто напишите тест для каждого свойства.

Одна из основных концепций модульного тестирования -тестируйте только одну вещь за раз, если у вас есть 2 сложных объекта, вам следует сравнивать индивидуальность каждого свойства, если только вы не хотите, чтобы ваш класс был сопоставим.

1 голос
/ 06 января 2012

Я предполагаю, что вы переопределили Equals / сделали класс Equatable, так что вы можете фактически получить равенство, даже если экземпляры разные.Почему бы не отладить свой тест и посмотреть, где в вашей реализации Equals равенство не выполняется?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...