[英]How to mock the view in the MVC integration testing using JUnit and EasyMock
我想模擬MVC design pattern
的視圖實現。 我已經實現了MVP
(另一個MVC
變體),並且想測試當模型上發生狀態更改時,控制器中是否正確調用了視圖中的某些方法。 下面顯示了在model
, controller
和view
上的方法調用的順序。
模型:
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.