读书人

单元测试之 easymock 运用实例

发布时间: 2012-10-25 10:58:57 作者: rapoo

单元测试之 easymock 使用实例

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

public void testArrayProcessing() throws Exception {
???? Integer[] numbers = new Integer[2] {
???????? new Integer(6),
???????? new Integer(7)
???? };
???? // 创建伪造对象
???? MockControl control = EasyMock.controlFor (Processor.class);
???? Processor mockProcessor = (Processor)control.getMock();
???? // 训练对象
???? mockProcessor.process (numbers[0]);
???? control.setReturnValue (new Integer(1));
???? mockProcessor.process (numbers[1]);
???? control.setReturnValue (new Integer(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的链接。
?

读书人网 >软件架构设计

热点推荐