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 以了解安装说明、文档及更多代码示例。
评论