![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| mullih |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 19.12.2006 Репутация: нет Всего: 2 |
Добрый день
Начал изучать NUnit и столкнулся с такой проблемой. При проверке на равенство двух одинаковых объектов не выполняется тест
Подскажите пожалуйста почему Assert.AreEqual(five, new Dollar(5)); выкидывает исключение? Это сообщение отредактировал(а) mullih - 3.8.2007, 10:52 |
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: 3 Всего: 3 |
Не знаю, что такое NUnit, но есть предположение, что Assert.AreEqual для ссылочных типов сравнивает адреса объектов в памяти. Очевидно, второй созданный обхект new Dollar(5) расположени уже совсем не там, где первый.
|
|||
|
||||
| andrx |
|
|||
![]() Андрей ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 16.12.2005 Где: Киев Репутация: 1 Всего: 4 |
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков) |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
если хочешь, чтобы экземпляры сравнивались по свойству amount заоверрайдь метод Equals() в классе Dollar.
|
|||
|
||||
| mullih |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 19.12.2006 Репутация: нет Всего: 2 |
Спасибо за помощь
На самом деле надо было переопределить Equals Сам не подумал что AreEqual привязана к этому методу класса Тему можно закрывать |
|||
|
||||
| Wizard_Memfis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 12.2.2007 Где: г. Донецк, Украин а Репутация: 1 Всего: 4 |
Также можно без переопределения метода сравнить самому поля этих объектов!Тогда твой код будет без изменений!Это уже кому как нравится!
--------------------
www.binary-studio.com |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Я бы сказал зависит от нужд приложения. У юнит-тестирования есть одна проблемка: иногда код приложения начинают писать, чтобы только тесты не падали. Если тебе не надо переопределять Equals, то и не надо делать это ради тестов, а лучше
Если же ты намереваешься где-либо еще, кроме тестов, пользоваться этим методом, тогда, конечно, надо переопределить. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
Wizard_Memfis, не лучший вариант, при любом изменении критериев сравнения их придётся искать по всему коду и править, а так в Equals всё локализовано.
Если поле для сравнения нужно не одно (чаще всё же одно, нечто вроде идентификатора), а все свойства, то можно в тот же Equals написать так, чтобы он все эти свойства вытаскивал через рефлексию. Это даст возможность не переписывать Equals после каждого изменения списка свойств. Ещё можно переопределить оператор ==, что может дать дополнительные удобства при написании кода. Это сообщение отредактировал(а) mihryak - 6.8.2007, 13:39 |
|||
|
||||
| mullih |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 19.12.2006 Репутация: нет Всего: 2 |
А можно привести маленький пример как свойства вытаскивать через рефлексию У меня получилось найти только public поля |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
в параметр BindingFlags добавь BindingFlags.NonPublic
|
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |