Mockito是一个针对Java的mocking框架。它与EasyMock和jMock很相似,但是通过在执行
后校验什么已经被调用,它消除了对期望行为(expectations)的需要。其它的mocking库需要你在执行
前记录期望行为(expectations),而这导致了丑陋的初始化代码。
正如Mockito用户、软件工程师
Hamlet D'Arcy在其博客中所说,无需期望行为(expectations)是个大成就:
“Mockito真的不需要期望行为,这简化了单元测试。从个人角度来说,由于该原因,我更喜欢Mockito API而不是EasyMock API。”
ThoughtWorks的
Ketan Padegaonkar也对Mockito的独特语法赞赏有加:
“它的语法看起来比JMock的好多了,会让人一见钟情;我现在已经迷上测试了。”
Mockito1.5版增加了“监视”非mock对象的能力,这是通过验证对其特定方法的调用实现的。例如:
List list = new LinkedList();
List spy = spy(list);
“spy”变量现在作为list对象的句柄。它可被看作一个mock对象。例如我们可以用stub对其size方法进行处理:
stub(spy.size()).toReturn(100); 我们还可以调用并验证普通的方法:
spy.add("one");
verify(spy).add("one");
另一个改进就是可读性更好的桩语法。例如:
stub(obj.someMethod()).toReturn(result);可写做:
doReturn(result).when(obj).someMethod(); 这与旧式写法长度一样,但可读性更好并且括号也少了。除了
doReturn(),还有doThrow()、doAnswer()及doNothing()期望行为。Mockito的其他有用的特性包括:
- 模拟具体类和接口的能力
- 客户化参数匹配器
- 顺序验证
- 干净的堆栈跟踪
上手Mockito就如同将一个JAR文件加到classpath中一样简单。请访问
Google Code project以了解安装说明、文档及更多代码示例。
(作者/Matthew Bass 译/张龙 出处/Infoq)
您可能对 [Java] 的这些文章也感兴趣: