之前《有效使用Mock编写java单元测试》一文中层介绍过使用EasyMock和PowerMock来编写java单元测试,今天介绍一个更加强大的工具——JMockit。
引用单元测试中mock的使用及mock神器jmockit实践中的java单元测试中各种Mock框架对比,就能明白JMockit有多么强大:
JMockit是基于JavaSE5中的java.lang.instrument包开发,内部使用ASM库来动态修改java的字节码,使得java这种静态语言可以想动态脚本语言一样动态设置被Mock对象私有属性,模拟静态、私有方法行为等等,对于手机开发,嵌入式开发等要求代码尽量简洁的情况下,或者对于被测试代码不想做任何修改的前提下,使用JMockit可以轻松搞定很多测试场景。
通过如下方式在maven中添加JMockit的相关依赖:
<dependency>
<groupId>com.googlecode.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.googlecode.jmockit</groupId>
<artifactId>jmockit-coverage</artifactId>
<version>0.999.24</version>
<scope>test</scope>
</dependency>
JMockit有两种Mock方式:基于行为的Mock方式和基于状态的Mock方式:
引用单元测试中mock的使用及mock神器jmockit实践中JMockit API和工具如下:
(1).基于行为的Mock方式:
非常类似与EasyMock和PowerMock的工作原理,基本步骤为:
1.录制方法预期行为。
2.真实调用。
3.验证录制的行为被调用。
通过一个简单的例子来介绍JMockit的基本流程:
要Mock测试的方法如下: