zoukankan      html  css  js  c++  java
  • EasyMock.replay()有什么用

    现在很多项目都使用EasyMock来作为单元测试框架。

    EasyMock一个方法,基本上是三步:EasyMock.expect()、EasyMock.replay()、EasyMock.verify()。

    在写单元测试的时候按这三步写,并不清楚EasyMock.replay()到底有什么作用。

    因为在很多单元测试里,把EasyMock.replay()去掉并不影响单元测试的运行。

    @Test
    public void queryBookListTest() {
            
        EasyMock.expect(myDatabase.queryList()).andReturn(null);
            
        List<Book> bookList = bookDaoImpl.queryBookList();
            
        Assert.assertTrue(bookList == null);
    }

     那么EasyMock.replay()到底有什么作用呢,在什么情况下才必须要有EasyMock.replay()单元测试才能正常运行呢?

    来看一下必须有EasyMock.replay()才能正常运行的情况:

    源码:

    @Override
    public List<Book> queryBookList() {
    
        List<Book> bookList = database.queryList();
        if (bookList == null) {
            bookList = database.queryList();
        }
        return bookList;
    }

    单元测试代码:

    @Test
    public void queryBookListTest() {
            
        EasyMock.expect(myDatabase.queryList()).andReturn(null);
        EasyMock.expect(myDatabase.queryList()).andReturn(null);
            
        mockControl.replay();
            
        List<Book> bookList = bookDaoImpl.queryBookList();
            
        mockControl.verify();
            
        Assert.assertTrue(bookList == null);
    }

    运行结果:

     来看看把EasyMock.replay()去掉会怎样:

    @Test
    public void queryBookListTest() {
            
        EasyMock.expect(myDatabase.queryList()).andReturn(null);
        EasyMock.expect(myDatabase.queryList()).andReturn(null);
            
        List<Book> bookList = bookDaoImpl.queryBookList();
            
        Assert.assertTrue(bookList == null);
    }

    运行结果:

     可以看到,报错了,单元测试没有运行成功。

    当代码里涉及到同一个接口方法多次调用时,如果仅仅是在单元测试里EasyMock方法,而没有replay()时,在单元测试运行的时候,是无法对接口方法进行Mock的。

    EasyMock.replay()是将Mock的行为按照Mock的步骤重发一遍,在单元测试运行的时候,就能够正确的执行了。

  • 相关阅读:
    便利的开发文档工具doxygen
    父页面 js 取得弹出窗口所选择的值, 弹出窗口关闭后刷新父页面
    ASCII码对照表
    C#中Brush、Color、String相互转换
    C#获取标准北京时间
    2005数据库脚本在SQL2000上执行 注意事项
    给Image控件后台赋Source值
    Web服务枚举组件不可用
    泛型集合转化为DataSet
    网站常见关于"登录|注册"和"姓名|注销"用JS实现
  • 原文地址:https://www.cnblogs.com/ld-mars/p/12082200.html
Copyright © 2011-2022 走看看