0

GWTテストのセクションではPresenter、オブジェクト内の出力を検証Displayする方法について説明していますが、その逆の方法については説明していません。つまり、ユーザーがのボタンをクリックしたときにPresenter正しいリクエストが行われるかどうかを確認したいと思います。RPC ServiceDisplay

ボタンのクリックをシミュレートするにはどうすればよいDisplayですか?GWTイベントの起動は、コンストラクターが保護されているため、簡単ではありません。クラスをサブクラス化せずに、それを簡単に行う方法はありClickEventますか?

@Before
protected void setUp() {
    mockRpcService = mock(NegotiationServiceAsync.class);
    eventBus = new HandlerManager(null);
    mockDisplay = mock(NegotiationPresenter.Display.class);
    negotiationPresenter = new NegotiationPresenter(mockRpcService,
            eventBus, mockDisplay);
}

@Test
private void testSth() {        
    when(mockDisplay.getSuppliersEmails()).thenReturn("address@domain.com");
    when(mockDisplay.getTaskDescription()).thenReturn("This is the task to do");

    // This does not work
    mockDisplay.getSubmitButton().fireEvent(new ClickEvent());      

    verify(mockRpcService).startTask(any(NegotiationRequest.class), any(AsyncCallback.class));      
}
4

1 に答える 1

1

MVP を使用する場合、通常はビューのモック実装を注入するプレゼンターでメソッドをテストするため、テストではディスプレイは何もせず、プレゼンターにスタブ メソッドを提供するだけです。一方、実際のディスプレイの実装では、すべてのアクションをプレゼンターに委任する必要があります。

ユーザーが送信ボタンをクリックしたときのプレゼンターの動作をテストするには、次のようにプレゼンターでメソッドを呼び出します。

@Test
private void testSth() {        
  when(mockDisplay.getSuppliersEmails()).thenReturn("address@domain.com");
  when(mockDisplay.getTaskDescription()).thenReturn("This is the task to do");

  negotiationPresenter.onSubmit();

  verify(mockRpcService).startTask(any(NegotiationRequest.class),
                                   any(AsyncCallback.class));      
}

実際のビューの実装を使用できるように、GWTTestCase を使用してコードをテストしたい場合は、非常に異なるケースですが、この場合、テストが長く続き、MVP を使用する主な目的の 1 つを失うことになります。 JVM で実行できるプレゼンターとクラスにあるはずのメイン アプリ コードをテストするためのビュー。

于 2013-02-19T11:52:07.683 に答える