簡體   English   中英

如何使用JUnit和EasyMock在MVC集成測試中模擬視圖

[英]How to mock the view in the MVC integration testing using JUnit and EasyMock

我想模擬MVC design pattern的視圖實現。 我已經實現了MVP (另一個MVC變體),並且想測試當模型上發生狀態更改時,控制器中是否正確調用了視圖中的某些方法。 下面顯示了在modelcontrollerview上的方法調用的順序。

模型:

model.setProperty("newProperty");

控制器:

@Override
    public void propertyChange(PropertyChangeEvent evt) {
        for (View view : views) {
            view.modelPropertyChange(evt);
        }
    }

視圖:導致視圖的結果如下:

@Override
    public void modelPropertyChange(PropertyChangeEvent evt) {
        if ("Property".equals(evt.getPropertyName())) {
            updateView();
        }
    }

問題:如何驗證(在JUnit測試中使用EasyMock )執行方法(帶有有效參數)的預期順序? 我期望view.modelPropertyChange(evt)被調用,並且期望view.isViewUpdated()view對象上返回true 我在JUnit測試中怎么說呢? 請幫忙!

@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()因此無需模擬isViewUpdated 您將在View類的測試中測試isViewUpdated

如果propertyChange確實調用了isViewUpdated那么您將在EasyMock.replay()之前添加以下調用:

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

請注意, EasyMock.createMock()不會強制以模擬的順序調用模擬的方法。 如果要強制執行方法順序,請使用EasyMock.createStrictMock()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM