Презентер TDD Model View с использованием MOQ


person chris    schedule 03.02.2011    source источник


Ответы (4)


Если Init() не дает желаемого результата, я бы не стал тестировать метод Init на GuiPresenter.

Что вы пытаетесь протестировать?

person Alex Dresko    schedule 05.02.2011

Я хочу проверить, что событие GUI UpdateFromDataSource имеет связанный обработчик. Итак, я хочу иметь возможность создать Mock GUI и проверить, что при вызове Init объекты Gui Mock UpdateFromDataSource имеют по крайней мере один обработчик событий.

Я хочу получить аналогичный тест тому, что в этом видео. http://blog.jpboodhoo.com/content/binary/appliedTestDrivenDevelopmentPart3/appliedtestdrivendevelopmentpart3.swf .

В видео используется Rhino Mock, а не Moq!

person chris    schedule 07.02.2011
comment
Вы всегда можете передать событие делегату, а затем указать, сколько их. Не помню, какие члены использовать, но я знаю, что они там есть. Тем не менее, эти тесты только проверяют, что у событий есть слушатели. Вы все еще не знаете, являются ли они правильными слушателями и правильно ли они поступают. Проверьте результат: что вы хотите, чтобы произошло, когда кнопка нажата. И забудьте об этом видео, это всего лишь один подход из многих. - person Thomas Eyde; 13.09.2011

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

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

person Thomas Eyde    schedule 12.09.2011

Итак, вы хотите проверить, что Init подключает событие View к соответствующему обработчику в презентаторе.

я бы создал

  • фиктивный вид
  • передать его в экземпляр докладчика
  • поднять фиктивное событие, например. mockView.Raise( m => m.UpdateDataSource()+= null )
  • проверить изменение состояния в презентере, которое должно произойти, если вызывается обработчик (//something)
person Gishu    schedule 14.09.2011