代码之家  ›  专栏  ›  技术社区  ›  walters

如何在使用JUnit和EasyMock的MVC集成测试中模拟视图

  •  0
  • walters  · 技术社区  · 16 年前

    我想模拟 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();
            }
        }
    

    问题:如何验证(使用 EasyMock 在 JUnit view.modelPropertyChange(evt) 去接电话和期待 view.isViewUpdated() 返回 true 看法

    1 回复  |  直到 16 年前
        1
  •  2
  •   NamshubWriter    16 年前
    @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 . 你会测试的 IsView已更新 View 班级。

    如果 propertyChange 你打过电话吗 IsView已更新 然后在之前添加以下调用 EasyMock.replay() :

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

    请注意 EasyMock.createMock() EasyMock.createStrictMock()

    推荐文章