原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十一)JUnit概述

本文介绍了JUnit 5的组成,包括JUnit Platform、JUnit Jupiter和JUnit Vintage,详细阐述了测试类和测试方法的定义,测试实例的生命周期,以及JUnit的全局配置和注解使用,强调了JUnit在Java单元测试和TDD中的重要地位。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
上一章我们分享了“使用JUnit、AssertJ和Mockito编写单元测试需要准备好的开发环境”。这一章我们来讲讲“什么是JUnit”。

Never in the field of software development was so much owed by so many to so few lines of code.

软件开发史上从未有过如此少量的代码对如此广阔的领域产生了如此巨大的作用。

--Martin Fowler

1997年,Eric Gamma(设计模式“四人帮”之一,Eclipse之父)和Kent Beck(极限编程方法学创始人)在从瑞士苏黎世飞往美国亚特兰大的飞机上偶遇,因为长路漫漫无心睡眠,两个人就进行结对编程,在下飞机之前完成了JUnit这个测试框架的第一个版本。此后,JUnit迅速传播,成为几乎每个Java项目的标配。

JUnit超级流行,是事实上的Java 单元测试和TDD的工具标准。有人在2016年选择了GitHub上最流行的3862个Java项目,找出了最常用的100个组件,可以看到JUnit 以63%的采用率遥遥领先于其他的组件:

在这里插入图片描述
知名的项目都有很高的单元测试覆盖率。而JUnit是Java领域单元测试的事实上的标准。另一个可以与JUnit抗衡的测试框架是TestNG,但只有不到10%的采用率。

JUnit 概述

JUnit是事实上的Java测试框架标准。至今JUnit已经发布了第5个版本。与以前的版本相比,JUnit5作出了大量的改进。本教程也是以版本5为基准介绍JUnit的使用。

JUnit 5需要JDK 8.0以上版本。

1. JUnit 5的组成

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

JUnit 5主要由三大部分组成:

  • JUnit Platform:为在JVM上启动测试框架提供基础。它还定义了TestEngine API, 用来开发在平台上运行的测试框架。此外,该平台还提供了一个用于从命令行启动该平台的控制台启动器和一个基于JUnit 4的运行器,用于在基于JUnit 4的环境中在该平台上运行任何TestEngine。它也为流行的IDE(IntelliJ IDEA、Eclipse、NetBeans、Visual Studio Code等)和构建工具(Gradle、Maven、Ant等)提供了一级的支持。
  • JUnit Jupiter:是在JUnit 5中编写测试和扩展的新型编程模型[扩展模型的组合。Jupiter子项目提供了用于在平台上运行基于Jupiter的测试的TestEngine
  • JUnit Vintage:提供用于在平台上运行基于JUnit 3和JUnit 4的测试的TestEngine

如果我们不需要和JUnit版本3或者4兼容,就不需要JUnit Vintage。

下面是JUnit 5的模块依赖关系图:
在这里插入图片描述

2. 测试类与测试方法

测试类是同时符合下述条件的类:

  • 至少包含一个测试方法。
  • 是顶层类、静态成员类或标记为@Nested的成员类。
  • 不是抽象类。
  • 不是private类。
  • 只有一个构造函数。构造函数一般没有参数。特殊情况下有参数(后面的章节会谈到这个)。

测试方法是同时符合下述条件的方法:

  • 被注解或元注解为@Test,@RepeatedTest,@ParameterizedTest,@TestFactory, @TestTemplate之一。
  • 是实例方法,不是静态方法。
  • 不是抽象方法。
  • 不是private方法。
  • 没有返回值。
  • 一般没有参数。特殊情况下有参数(后面的章节会谈到这个)。
  • 可以抛出任何异常。

测试类可以从超类或接口上继承测试方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值