2010-06-20 2 views
2

Мне нужно создать некоторые модульные тесты, которые подтверждают, что экземпляр класса отвечает соответствующим образом событию, поднятому другим объектом. Передача в макете «наблюдаемого» объекта достаточно проста, но, насколько я могу судить, издевательства в nunit не дают средства для того, чтобы макет подбрасывал событие.Тестирование обработки событий с помощью mocks с помощью nunit

Я рассматриваю возможность использования отражения для прямого вызова обработчика события на объект, который я тестирую, передавая ссылку на макет как «отправитель», но это не позволяет эффективно проверить, что мой объект правильно подключил события в первую очередь (хотя теперь я думаю об этом, это, вероятно, должно быть проверено отдельно).

Это похоже на хак, но я не вижу другого способа сделать это; Есть ли способ лучше? Кроме того, возможно ли для насмешки проверить, что событие подключено?

ответ

1

Код RhinoMock отлично подходит для проверки, что подписка происходит или для проверки того, что события поднимаются, но не настолько велики, для повышения событий сам.

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

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

+0

Я догадываюсь, что ответ на мой первоначальный вопрос - это просто «нет», хотя я должен был указать, что я почти ограничен обстоятельствами для насмешек nunit. Похоже, мне придется пойти с опцией заглушки. – Flynn1179

1

Я использую Rhino Mocks для создания издевается, и они обрабатывают события очень красиво: http://ayende.com/Wiki/Default.aspx?Page=Rhino+Mocks+Events&AspxAutoDetectCookieSupport=1

+0

Прохладный, никогда не замечаемый Rhino мог это сделать; к сожалению, я должен использовать nUnit в этом экземпляре. – Flynn1179

+0

Привет @ Flynn1179, NUnit? Обычно вы используете Rhino Mocks поверх NUnit. Вы используете насмешливую структуру, которая поставляется с NUnit? – Grzenio

+0

Да; Однако, учитывая, что все наши текущие тесты не используют Rhino, мне было бы трудно заставить мою команду/босса использовать Rhino для некоторых тестов и издевательства nUnit для других или полностью переключиться на Rhino. – Flynn1179

Смежные вопросы