TDD Model View Presenter с использованием MOQ - PullRequest
0 голосов
/ 03 февраля 2011

Я видел видео с использованием TDD и шаблона MVP для создания небольшого приложения.Это видео показано здесь:

http://blog.jpboodhoo.com/content/binary/appliedTestDrivenDevelopmentPart3/appliedtestdrivendevelopmentpart3.swf.

В ролике используются носороги Rhino, кто-нибудь может пролить свет на то, как вы можете выполнить тот же тест, используя MOQ.

Итакесли бы у меня был следующий код ниже, как бы я написал тест (используя MOQ) для проверки метода Init ()?

public interface IGui
{
   event eventhandler UpdateFromDataSource;
} 

public class Gui :IGui
{
   button.Click += delegate { UpdateFromDataSource(); }   
}

public class GuiPresenter
{
    IGui gui;
    public GuiPresenter(IGui gui)
    {
       this.gui = gui;
    }

    public Init()
    {
        gui.UpdateFromDataSource += delegate {//something};
    }
}

Спасибо

CA

Ответы [ 4 ]

0 голосов
/ 14 сентября 2011

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

Я бы создал

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

Я хочу проверить, что событие GUI UpdateFromDataSource имеет подключенный обработчик.Поэтому я хочу иметь возможность создать макет GUI и проверить, что при вызове Init объекты Gui Mock UpdateFromDataSource имеет как минимум один обработчик событий.видео.http://blog.jpboodhoo.com/content/binary/appliedTestDrivenDevelopmentPart3/appliedtestdrivendevelopmentpart3.swf.

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

0 голосов
/ 12 сентября 2011

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

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

0 голосов
/ 06 февраля 2011

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

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

...