JUnit&JMockit单元测试总结

1.JUnit简介

Java单元测试框架业内应用较多的是JUnit,它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

目前JUnit主流版本有3.x,4.x和5.x,目前继续推荐使用4.x版本,各个IDE中也自动集成了它。

2.JMockit简介

基于Junit单元测试的框架有很多,包括EasyMock、JMock、mockito、JMockit等。Mock框架也能进行stub的测试方法。但通过各种测试框架的对比,JMockit对于目前流行的测试方法全部支持,功能强大。因此选择JMockit作为Junit单元测试的框架。

JMockit是帮助创建mock对象的工具,它基于Java开发,在Java测试与开发环境中有不可比拟的优势,更重要的是,它大大简化了虚拟对象的使用。

3.Maven集成单元测试工具

<!‐‐版本号‐‐>
<properties>
<junit.versioin>4.12</junit.versioin>
<jmockit.version>1.34</jmockit.version>
</properties>
<!‐‐依赖‐‐>
<dependencies>
   <dependency>
     <groupId>org.jmockit</groupId>
     <artifactId>jmockit</artifactId>
     <version>${jmockit.version}</version>
     <scope>test</scope>
</dependency>
 <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>${junit.versioin}</version>
     <scope>test</scope>
 </dependency>
</dependencies>

4.单元测试的使用

  • JUnit4基础语法

    Junit4.x区别与之前的版本,无需显示的声明测试类继承于TestCase。通过使用Junit annotation进行编写单元测试用例。

    • @Test: 标识测试方法

    • @Ignore: 被忽略的测试方法或测试类

    • @Before: 初始化方法,在任何一个测试执行之前必须执行的代码

    • @After: 释放资源,在任何测试执行之后需要进行的收尾工作。在每个测试方法执行之后执行一次,该annotation只能修饰public void 方法;

    • @BeforeClass: 针对所有测试,只执行一次,且必须为public static void;一般用于初始化必要的消耗较大的

      资源,例如数据库连接等

    • @AfterClass: 针对所有测试,将会在所有测试方法执行结束后执行一次,且必须为public static void;

    • @Parameters: 进行单元测试的时候,通常一个方法需要好几个case进行测试,Junit提供参数化便于我们对方法进行多种参数的组合测试

      4.9之后引入@Rule和@ClassRule,本质上是对@BeforeClass, @AfterClass, @Before, @After等的另一种实现,只是功能上更灵活多变,易于扩展,且方便在类和项目之间共享。

      两个注解使用时需要放在实现了TestRule接口的Rule变量或返回Rule的方法之上,且修饰符都必须为public。@Rule为变量或方法级注解,每个测试方法执行时都会调用被该注解修饰的Rule;@ClassRule为类级注解,执行单个测试类时只会调用一次被该注解修饰的Rule。

  • JMockit基础语法

    JMockit的测试更多是基于注解来实现的。Jmockit中常用的注解有:

    • @Mocked:被修饰的对象将会被Mock,对应的类和实例都会受影响(同一个测试用例中)

      @Mocked是针对类型的,可用于测试类成员mock field与参数用例参数mock parameter。对mock field的注解作用于整个测试类,而对mock parameter的注解只针对该测试用例。

    • @Injectable:仅Mock被修饰的对象

      @Injectable是针对单个实例的,可用于测试类成员mock field与参数用例参数mock parameter。对mock field的注解作用于整个测试类,而对mock parameter的注解只针对该测试用例。

    • @Capturing:可以mock接口以及其所有的实现类

      @Capturing 标识一个被Mock的对象,从该对象派生的子类也被Mock了。可以通过maxInstances方法来指定最大有多少层子类也被mock。当然和@Mocked以及@Injectable一样,均可用作class field和测试用例的参数的注解。同时,它是针对类型的。

    • @Tested:指定被测试的对象

      @Tested标识一个被测对象的实例。通过@Tested标签标识的被测对象实例,将会在测试方法执行之前被初始化。

    • @Mock:MockUp模式中,指定被Fake的方法

最新文章

  1. ReactNative 当前url和cookies的获取
  2. Python In Action:一、入门小例子
  3. MATLAB与C#混合编程 之 double与MWArray 、MWNumericArray 转化
  4. 七、考反映小游戏《苹果iOS实例编程入门教程》
  5. Word中怎么设置标题的自动编号
  6. git报错 error: cannot stat ‘file’: Permission denied
  7. 如何制作网页小动画?——gif or png
  8. HDU 2013 蟠桃记
  9. Android——列表选择框(Spinner)
  10. 在java中高效的计数器
  11. Ⅵ.AngularJS的点点滴滴-- 指令
  12. IOS快速开发之常量定义
  13. 翻书的效果:FMX.TSwipeTransitionEffect Animation
  14. [置顶] 使用sping AOP 操作日志管理
  15. 如何使用ajax(jquery)
  16. A Simple Math Problem(矩阵快速幂)(寒假闭关第一题,有点曲折啊)
  17. zabbix的各种键值
  18. [Swift]LeetCode673. 最长递增子序列的个数 | Number of Longest Increasing Subsequence
  19. Java环境变量配置----JDK开发环境及环境变量设置
  20. 使用kubeadm安装kubenetes

热门文章

  1. 如何抓取 framework input 事件相关 log
  2. Vue-cli脚手架 安装 并创建项目--命令
  3. sqlserver的表变量在没有预估偏差的情况下,与物理表可join产生的性能问题
  4. SERCOS总线程序相关
  5. git 删除文件/移动文件
  6. 如何用node.js中的ejs写入页面_以6.19京东秒杀的商品为例
  7. Python time.time()方法
  8. vs 2019 自带 反编译 与 Reflector 反编译工具比较
  9. css实现左右两个div等高
  10. 在 Linux 下学习 C 语言有什么好处?