(一)Jmockit单元测试-基础篇

本文介绍JMockit这一强大的Java测试工具,它支持多种类型的mock,包括抽象类、接口和静态方法等。文章涵盖JMockit的工作原理、使用场景及其API和工具,并提供了环境配置示例。

一.Jmockit 的简介:(https://code.google.com/p/jmockit/)
 JMockit 是用以帮助开发人员编写测试程序的一组工具和API,它完全基于 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) :
    基于行为的mock,对mock目标代码的行为进行模仿,更像黑盒测试。

  2. State-oriented(MockUp) :
    基于状态的mock,站在目标测试代码内部的。可以对传入的参数进行检查、匹配,才返回某些结果,类似白盒。而State-oriented的 new MockUp基本上可以mock任何代码或逻辑。非常强大。

二.Mock 工具的原理:
mock工具工作的原理如下图:
在这里插入图片描述

  1. record 阶段:录制期望。数据准备阶段,创建依赖的class,interface,method,模拟返回的数据,及调用的次数等。
  2. replay阶段:通过调用被测的代码,执行测试。期间会invoke到第一阶段record的mock对象或者方法。
  3. verify阶段:验证。可验证调用返回是否正确,mock的方法调用次数、顺序等。

三.Mock的使用场景
如:

  1. mock:外部应用HSF service调用的依赖,如:TP,UIC的hsf服务依赖。
  2. mock:对DAO层的调用,如访问mysql、oracle,TFS等底层存储的调用
  3. mock:对系统间异步交互通知消息。
  4. mock:method A中涉及method B的调用,mock相应的method B。
  5. mock:对一些应用里面自己的class(抽象类abstract,final,静态类static),interface,annotation,enum,native等mock。

四.Jmockit的API及tools
在这里插入图片描述
可以看到jmockit常用的Expectation、NonStrictExpectations 期望录制 及Annotation @Tested、@Mocked,@NonStrict、@Injectable 等简洁的mock代码风格。而且jmockit 还自带了code coverage的工具供本地UT时候看逻辑覆盖或代码覆盖率使用。

五.Jmockit 的使用
第一步:环境配置–添加Jmockit的jar包依赖
使用jMockit首先要引用相关的jar包,在Maven pom.xml配置中引入jmockit的jar包,(可顺带引入jmockit自带的code coverage的jar),pom文件引用如下:

<!-- 先声明jmockit的依赖 -->
<dependency>
	<groupId>org.jmockit</groupId>
	<artifactId>jmockit</artifactId>
	<version>1.20</version>
	<scope>test</scope>
</dependency>
<dependency>
	<groupId>org.jmockit</groupId>
	<artifactId>jmockit-coverage</artifactId>
	<version>1.20</version>
	<scope>test</scope>
</dependency>
<!-- 再声明junit的依赖 -->
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.11</version>
	<scope>test</scope>
</dependency> 

JUnit4.x及以下用户特别注意事项:
如果你是通过mvn test来运行你的测试程序 , 请确保JMockit的依赖定义出现在JUnit的依赖之前。
如果你还需要使用JMockit的代码覆盖率功能,在pom.xml中如下添加 :code coverage的jar

参考资料:

  1. JMockit中文网:http://jmockit.cn/index.htm
    我觉得如果仅仅是开发自测的话,把JMockit中文网认真看一遍,就可以在项目中使用JMockit了。

  2. JMockit中文教程:https://www.jianshu.com/c/cfe7310a18ff
    官方文档中文版。对于不喜欢看英语文档的人还是很不错的。这个教程比JMockit详细,文档嘛肯定更全面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值