Как сделать так, чтобы Assert.AreEqual передавал POCO - PullRequest
2 голосов
/ 06 июля 2011

Assert.AreEqual не работает на POCO.Это, однако, не терпит неудачу на отдельных пунктах в POCO.Как заставить его работать на полных POCO в VS 2010

Ответы [ 3 ]

4 голосов
/ 06 июля 2011

Правильно ли переопределяют ваши POCO Equals? Если нет, то это проблема. Переопределите Equals и GetHashCode, и все будет в порядке.

Это предполагает, что есть только одно понятие равенства, которое вы должны охватить. Альтернативой является реализация IEqualityComparer<T> в другом классе и использование этого. (Я не знаю, принимает ли Assert.AreEqual необязательный параметр IEqualityComparer<T>, но вы всегда можете вызвать его явно.)

2 голосов
/ 06 июля 2011

Тесты не пройдены, потому что ваши объекты не равны .Они могут иметь одинаковые значения в своих полях, но это не делает их равными.По умолчанию объекты равны, если они имеют один и тот же адрес и поэтому являются одним и тем же объектом.

Чтобы получить желаемое поведение (то есть, чтобы объекты, свойства которых имеют одинаковые значения, были равны), вам необходимо переопределить Equals и определить, что делает ваши объекты равными.Если это все свойства, то проверьте все свойства здесь.Если это только некоторые из них, то только проверяйте их.Сделайте все, что нужно, чтобы определить равенство в вашем контексте.

Если вы переопределяете Equals, вам также следует переопределить GetHashCode и убедиться, что когда Equals истинно для двух объектов, GetHashCode вернетодинаковое значение для обоих.

2 голосов
/ 06 июля 2011

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

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