JUnit 5 简介

Junit5架构

junit5是一个platform,其引入的新API叫做junit-jupiter,所以有时junit5也被叫做junit platform或junit jupiter。

JUnit 5 简介

junit-jupiter-engine:是一个TestEngine接口,用于发现和执行matching tests,默认有两个实现:

  • junit-vintage-engine:发现和执行junit3和junit4的test cases,其依赖于junit-4.12(junit4目前最新版本)。
  • junit-jupiter-engine:发现和执行junit5的test cases。
  • 企业或个人通过实现junit-platform-engine,开发自己的TestEngine和Test API。

junit3和junit4被大量的公司和企业使用,不能够直接放弃它们,junit5使用junit-vintage-engine来兼容老老代码。vintage是指特定年份的美酒(葡萄酒),这里用来指代junit3和junit4,足见其地位还是比较高的。

junit-platform-launcher:使用(调用)junit-platform-engine,通过ServiceLoader找到不同的实现,来执行不同的unit test。IDE和maven,gradle等都需要junit-platform-launcher来调用执行unit test。

Junit5 package diagram

点击下载-SVG格式的package diagram

Open4j的用途[1]

支持 JUnit 的测试框架在如何处理测试执行期间抛出的异常方面有所不同。JVM 上的测试没有统一标准,这是 JUnit 团队一直要面对的问题。除了 java.lang.AssertionError,测试框架还必须定义自己的异常分层结构,或者将自身与 JUnit 支持的异常结合起来(或者在某些情况下同时采取两种方法)

为了解决一致性问题,JUnit 团队提议建立一个开源项目,该项目目前称为 Open Test Alliance for the JVM(JVM 开放测试联盟)。该联盟在此阶段仅是一个提案,它仅定义了初步的异常分层结构。

Maven dependency

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

<dependency>

<groupId>org.junit.platform</groupId>

<artifactId>junit-platform-launcher</artifactId>

<version>1.2.0</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.junit.jupiter</groupId>

<artifactId>junit-jupiter-engine</artifactId>

<version>5.2.0</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.junit.vintage</groupId>

<artifactId>junit-vintage-engine</artifactId>

<version>5.2.0</version>

<scope>test</scope>

</dependency>

junit-vintage-engine依赖于junit4,所以项目中可以删去对junit4的直接依赖。对于新项目,不需要考虑兼容老的test case,就不用依赖junit-vintage-engine,全都用jupiter-api来写test case。

Junit4中运行junit5

是指unit test的语法标签是junit5的,但是使用junit4来执行。在测试类上加@RunWith(JUnitPlatform.class)注解,就可以使那些执行junit4但还不支持junit5的IDE和工具来执行junit5语法的unit test。

1

2

3

4

5

6

<dependency>

<groupId>org.junit.platform</groupId>

<artifactId>junit-platform-runner</artifactId>

<version>1.2.0</version>

<scope>test</scope>

</dependency>

测试代码

01

02

03

04

05

06