| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > NUnit сравнение объектов |
| Автор: mullih 3.8.2007, 10:51 | ||
| Добрый день Начал изучать NUnit и столкнулся с такой проблемой. При проверке на равенство двух одинаковых объектов не выполняется тест
Подскажите пожалуйста почему Assert.AreEqual(five, new Dollar(5)); выкидывает исключение? |
| Автор: anonym 3.8.2007, 11:34 |
| Не знаю, что такое NUnit, но есть предположение, что Assert.AreEqual для ссылочных типов сравнивает адреса объектов в памяти. Очевидно, второй созданный обхект new Dollar(5) расположени уже совсем не там, где первый. |
| Автор: andrx 3.8.2007, 11:42 |
| anonym поддерживаю mullih посмотри http://msdn2.microsoft.com/en-us/library/ms243413(VS.80).aspx |
| Автор: mihryak 3.8.2007, 11:54 | ||
если хочешь, чтобы экземпляры сравнивались по свойству amount заоверрайдь метод Equals() в классе Dollar.
|
| Автор: mullih 3.8.2007, 12:01 |
| Спасибо за помощь На самом деле надо было переопределить Equals Сам не подумал что AreEqual привязана к этому методу класса Тему можно закрывать |
| Автор: Wizard_Memfis 6.8.2007, 11:19 |
| Также можно без переопределения метода сравнить самому поля этих объектов!Тогда твой код будет без изменений!Это уже кому как нравится! |
| Автор: mihryak 6.8.2007, 13:27 |
| Wizard_Memfis, не лучший вариант, при любом изменении критериев сравнения их придётся искать по всему коду и править, а так в Equals всё локализовано. Если поле для сравнения нужно не одно (чаще всё же одно, нечто вроде идентификатора), а все свойства, то можно в тот же Equals написать так, чтобы он все эти свойства вытаскивал через рефлексию. Это даст возможность не переписывать Equals после каждого изменения списка свойств. Ещё можно переопределить оператор ==, что может дать дополнительные удобства при написании кода. |
| Автор: mullih 7.8.2007, 12:04 | ||
А можно привести маленький пример как свойства вытаскивать через рефлексию У меня получилось найти только public поля |
| Автор: mihryak 7.8.2007, 12:30 |
| в параметр BindingFlags добавь BindingFlags.NonPublic |
| Автор: mihryak 7.8.2007, 12:47 | ||
|