Тестирование обработки событий с помощью макетов с использованием nunit - PullRequest
2 голосов
/ 20 июня 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 24 июня 2010

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

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

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

1 голос
/ 21 июня 2010

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

...