EasyMock.replay()有什么用
程序员文章站
2022-05-07 13:54:38
现在很多项目都使用EasyMock来作为单元测试框架。 EasyMock一个方法,基本上是三步:EasyMock.expect()、EasyMock.replay()、EasyMock.verify()。 在写单元测试的时候按这三步写,并不清楚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的步骤重发一遍,在单元测试运行的时候,就能够正确的执行了。