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的步骤重发一遍,在单元测试运行的时候,就能够正确的执行了。

  • 相关阅读:
    对称的二元变量和不对称的二元变量之间的区别是什么?
    数据挖掘中ID3算法实现zz
    深入浅出谈数据挖掘zz
    JS动态生成表格后 合并单元格
    JS 点击元素发ajax请求 打开一个新窗口
    JS实现拖动div层移动
    简单的表格json控件
    JS添加标签效果
    JS模板引擎
    如何使用seajs+jQuery构建中型项目
  • 原文地址:https://www.cnblogs.com/ld-mars/p/12082200.html
Copyright © 2011-2022 走看看