Jmockit Mocking库初体验

Feb 11, 2018 |

网上的测评都说Jmockit非常全面, 且api的一致性很好, 能自动处理@Autowired等注解试了一下,记录之

待注入的接口DependencyAbc有两个方法, intReturningMethod返回int, stringReturningMethod返回String, 这个接口主要是测试Jmockit的Mock功能
ClassUnderTest类需要注入ClassUnderTest的实例, 在doSomething()方法中, 先调用abc.intReturningMethod返回要执行abc.stringReturningMethod()的次数, 然后在循环中调用abc.stringReturningMethod()。
单元测试的代码如下:

Jmockit相关的信息如下
@Tested注解待测试的对象, 这个对象可以是具体的类, 也可以是抽象的类, 如果是抽象的类那么Jmockit会自动实现哪些抽象方法
@Mocked 表示为该注解标识的接口或者抽象类产生一个Mock对象,
@Injectable 表示该注解标识的对象是能被注入的。

表示录制一个期望对象, 产生了一个Expectations的匿名子类, 在匿名子类的代码块中,指定, 如果调用intReturningMethod()方法,那么返回3,
abc.stringReturningMethod(this.anyString);表示以任意参数调动该方法, 前两次分别返回"javacoder.cn"和"helloWorld", 第三次抛出异常。(this.anyString, this.returns(), this.result都是Expectations的属性和方法, 简单看了一下源码, 最后是通过asm产生新的DependencyAbc对象 )

Verifications 原理和Expectations类似。我们调动Verifications.withCapture()来捕获传递给stringReturningMethod()方法的参数。

纵然Jmockit有千般本领,万般美好,但是spring-boot-test使用的是mockito库, 所以
goodbye Jmockit, hello mockito

Posted in: java基础

Comments are closed.