当前位置: 移动技术网 > IT编程>开发语言>Java > EasyMock.replay()有什么用

EasyMock.replay()有什么用

2020年01月02日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网