单元测试之 easymock 使用实例

这里有测试一个方法的范例,Mapper.map(Processor, Integer[]),map方法对数组中的每个整数调用Processor.process 方法:

public void testArrayProcessing() throws Exception {

Integer[]numbers=newInteger[2]{

newInteger(6),

newInteger(7)

};

//创建伪造对象

MockControlcontrol=EasyMock.controlFor(Processor.class);

ProcessormockProcessor=(Processor)control.getMock();

//训练对象

mockProcessor.process(numbers[0]);

control.setReturnValue(newInteger(1));

mockProcessor.process(numbers[1]);

control.setReturnValue(newInteger(1));

//开始

control.activate();

//运行测试

Mapper.map(mockProcess,numbers);

//验证测试

control.verify();

 }

调用control 的verify 方法很重要,否则训练的一半就不能被测试。例如如果我们已经指定那个方法必须返回整数'1',那么调用verify方法确保返回的确实是那个值。 

训练过程中的方法调用的顺序没有影响,但是我们可以指定一个方法只能被调用指定的次数:

//假设Processor接口有一个setName方法,并且

//我们的类Mapper,对每个项目都调用那个方法一次

mockProcessor.setName(Test);

control.setVoidCallable(3);

当我们调用verify方法,它会检查setName被调用了多少次,如果那个方法被调用得太频繁就会报告一个错误。

EasyMock的主要局限性是只能工作于接口上,但是使用接口是一个好的设计习惯,这没有什么可抱怨的。

EasyMock可以节省很多费力的工作并使得可以更快的编写单元测试。可以从网上下载EasyMock,还有一个关于对象仿制的论文和其他的对象仿制API的链接。

相关推荐