Java 如何使用JUnit和EasyMock模拟MVC集成测试中的视图
我想模拟Java 如何使用JUnit和EasyMock模拟MVC集成测试中的视图,java,model-view-controller,junit,easymock,Java,Model View Controller,Junit,Easymock,我想模拟MVC设计模式的视图实现。我已经实现了MVP(另一个MVC变体),并且想测试当模型发生状态更改时,视图中的某些方法是否被控制器正确调用。下面显示了模型、控制器和视图上方法调用的顺序 型号: model.setProperty("newProperty"); model.setProperty(“newProperty”); 控制器: @Override public void propertyChange(PropertyChangeEvent evt) { fo
MVC设计模式的视图实现。我已经实现了MVP
(另一个MVC
变体),并且想测试当模型发生状态更改时,视图中的某些方法是否被控制器正确调用。下面显示了模型
、控制器
和视图
上方法调用的顺序
型号:
model.setProperty("newProperty");
model.setProperty(“newProperty”);
控制器:
@Override
public void propertyChange(PropertyChangeEvent evt) {
for (View view : views) {
view.modelPropertyChange(evt);
}
}
@凌驾
公共作废属性更改(属性更改事件evt){
用于(视图:视图){
view.modelPropertyChange(evt);
}
}
视图:
此结果与调用的视图类似:
@Override
public void modelPropertyChange(PropertyChangeEvent evt) {
if ("Property".equals(evt.getPropertyName())) {
updateView();
}
}
@凌驾
公共无效模型PropertyChange(PropertyChangeEvent evt){
if(“Property”.equals(evt.getPropertyName())){
updateView();
}
}
问题:如何验证(在JUnit
测试中使用EasyMock
)方法(带有有效参数)的预期执行顺序?我期望调用view.modelPropertyChange(evt)
,并期望view.isViewUpdated()
在视图
对象上返回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
。您可以在视图
类的测试中测试isViewUpdated
如果propertyChange
确实调用了isViewUpdated
,那么您应该在EasyMock.replay()之前添加以下调用:
请注意,EasyMock.createMock()
不强制按模拟的顺序调用模拟的方法。如果希望强制执行方法顺序,请使用EasyMock.createStrictMock()
我在运行EasyMock.verify(mockView)时出错:“验证时预期失败…”通常可以从堆栈跟踪中看出问题所在。上面的代码告诉EasyMock,希望通过一个等于“evt”的事件在视图上调用“modelPropertyChange”。如果EasyMock.verify()中出现异常,通常表示未调用该方法。
EasyMock.expect(mockView.isViewUpdated()).andReturn(true);