0

のビュー実装をモックしたいと思いMVC design patternます。MVP(別のバリエーション)を実装しMVCました。モデルで状態の変更が発生したときに、ビュー内の特定のメソッドがコントローラーによって正しく呼び出されるかどうかをテストしたいと思います。modelcontrollerおよびでのメソッド呼び出しのシーケンスを次に示しますview

モデル:

model.setProperty("新しいプロパティ");

コントローラ:

@オーバーライド
    public void propertyChange(PropertyChangeEvent evt) {
        for (View ビュー : ビュー) {
            view.modelPropertyChange(evt);
        }
    }

ビュー: この結果、ビューは次のように呼び出されます。

@オーバーライド
    public void modelPropertyChange(PropertyChangeEvent evt) {
        if ("プロパティ".equals(evt.getPropertyName())) {
            updateView();
        }
    }

質問: (テストで使用EasyMockしてJUnit) メソッドの予想される順序 (有効な引数を持つ) をどのように検証しますか? 私はview.modelPropertyChange(evt)呼び出されることを期待し、オブジェクトview.isViewUpdated()に戻ることを期待しています。JUnit テストでそれをどのように言えばよいでしょうか。助けてください!trueview

4

1 に答える 1

2
@RunWith(JUnit4.class)
public class ControllerTest {
  @Test
  public void updateView() {
    PropertyChangeEvent evt = new PropertyChangeEvent( ... );
    View mockView = EasyMock.createMock(View.class);
    mockView.modelPropertyChange(evt);
    EasyMock.replay(mockView);

    Controller controller = new Controller( ... );
    controller.propertyChange(mockView);
    EasyMock.verify(mockView);
  }
}

Controller.propertyChange()は呼び出さView.isViewUpdated()れないため、モックする必要がないことに注意してくださいisViewUpdatedisViewUpdatedクラスのテストでテストしますView

propertyChange呼び出す場合はisViewUpdated、前に次の呼び出しを追加しますEasyMock.replay()

EasyMock.expect(mockView.isViewUpdated()).andReturn(true);

EasyMock.createMock()モックされたメソッドがモックされた順序で呼び出されることを強制しないことに注意してください。メソッドの順序を強制する場合は、次を使用しますEasyMock.createStrictMock()

于 2010-09-13T13:48:15.177 に答える