四. Jmockit的简介:
JMockit 是用以帮助开发人员编写测试程序的一组工具和API,它(https://code.google.com/p/jmockit/)完全基于 Java 5 SE 的 java.lang.instrument 包开发,内部使用 ASM 库来修改Java的Bytecode。正是由于基于instrument,可以修改字节码。所以这也是它强大的原因。
Jmockit可以mock的种类包含了:1.class(abstract, final, static) ;2.interface ;3.enum ;4.annotation ;5.native 。
Jmockit 有两种mock的方式:
1. Behavior-oriented(Expectations & Verifications) ;
2. State-oriented(MockUp<GenericType>) 。
通俗点讲,Behavior-oriented是基于行为的mock,对mock目标代码的行为进行模仿,更像黑盒测试。State-oriented 是基于状态的mock,是站在目标测试代码内部的。可以对传入的参数进行检查、匹配,才返回某些结果,类似白盒。而State-oriented的 new MockUp基本上可以mock任何代码或逻辑。非常强大。
以下是jmockit的APIs和tools:
可以看到jmockit常用的Expectation、NonStrictExpectations 期望录制 及Annotation @Tested、@Mocked,@NonStrict、@Injectable 等简洁的mock代码风格。而且jmockit 还自带了code coverage的工具供本地UT时候看逻辑覆盖或代码覆盖率使用。
五.Jmockit的实践:
第一步:添加jmockit的jar包依赖
在refund的单元测试过程中,第一步:应用pom中引入jmockit的jar包,可以顺带引入jmockit自带的code coverage的jar。
第二步:一个完整的Jmockit的示例: