Gangmax Blog

EasyMock使用方法

由于我这两天改了workflow的action handler代码,今天跑UT的时候发现相关的几个测试用例运行失败了。于是需要我来修改。

修改的过程中我发现,原来James写的workflow测试用例都是针对action handler的,而且都是使用EasyMock来mock出ExecutionContext等对象,所以就隔离了具体的数据库操作。换句话说,目前的workflow unit test cases并没有真正的进行数据库的操作。另外在修改测试用例的过程中,我把原来一直不太清楚的EasyMock的工作过程终于搞清楚了。以下是我今天的心得总结。

EaskMock的使用基本上分五个步骤:

  1. 用“EasyMock.createMock(…)”创建mock对象。需要注意的是,如果是为interface创建mock对象,直接使用easkmock.jar就可以;如果是为concrete class创建mock对象,使用easymockclassextension.jar。

  2. 用“EasyMock.expect(…)”或者“EasyMock.expectLastCall()”来录制我们期望的mock对象的行为。前者是录制有返回值的方法行为,后者是录制没有返回值(void)的方法行为。

  3. 使用“EasyMock.replay()”结束mock对象录制阶段,ready to run。

  4. 将mock对象注入我们的代码。

  5. 单元测试开始,看运行结果是否是期待的。

参考了:http://easymock.org/EasyMock3_0_Documentation.html

另:

貌似可以加上第六步:“EasyMock.verify()”。这一步的目的是为了验证在第二步中录制的行为,是否在第五步中都被运行到了。如果没有则报错。由于我们在workflow中的测试主要是为了验证流程是否能够正常完成,所以只要求mock对象能够正常运行即可,因此没有这一步。

Comments