EasyMock.replay()有什么用

2020-01-02 08:41:38来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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


原文链接:https://www.cnblogs.com/ld-mars/p/12082200.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:no supported authentication methods avaiable

下一篇:jquery获取select选中的文本值