JUnit5简介、安装与准备
JUnit5 简介安装与准备
简介

- JUnit 5 是一个强大的测试框架,广泛应用于 Java 开发中,用于编写和运行测试。 它提供了丰富的功能和灵活的扩展性,可以用于各种类型的测试,包括单元测试、集成测试、回归测试、行为驱动开发测试、验收测试和性能测试。通过使用 JUnit 5 完成这些测试测试工作,可以确保代码的正确性、稳定性和性能,最终达到提升软件质量。
使用场景
- 单元测试:验证单个类或方法的功能是否正确。适用于代码中的每个独立模块,确保其按照预期工作。
- 集成测试:测试多个组件或模块之间的交互,确保它们能协同工作。通常涉及数据库、网络等外部资源。
- 回归测试:在代码发生变化后,验证新代码没有引入新的错误,旧功能仍然正常工作。用于长期维护项目。
- 行为驱动开发(BDD):通过描述系统的行为来驱动开发和测试。增强了测试用例的可读性和可维护性。
- 验收测试:验证系统是否满足业务需求和用户期望。通常由 QA 团队或产品经理编写和执行。
- 性能测试:测量系统在不同负载条件下的性能表现,确保系统在预期负载下稳定运行。
使用价值
1.丰富的注解支持:提供了 @Test, @BeforeEach, @AfterEach, @BeforeAll, @AfterAll 等多种注解,方便测试生命周期管理。
2.强大的断言和假设:丰富的断言方法和假设工具,使得测试验证更加方便和直观。
3.动态测试支持:支持通过 @TestFactory 在运行时生成测试用例,提供更灵活的测试编写方式。
4.条件测试执行:通过注解(如 @EnabledOnOs, @EnabledIf),可以根据特定条件有选择地执行测试,提高测试的灵活性。
5.良好的兼容性和迁移支持:通过 JUnit Vintage 支持运行 JUnit 3 和 JUnit 4 的测试,确保平滑迁移到 JUnit 5。
6.Lambda 表达式支持:充分利用 Java 8 的新特性,如 lambda 表达式,使得编写测试更加简洁和强大。
7.更好的 IDE 和构建工具支持:与现代 IDE(如 IntelliJ IDEA、Eclipse)和构建工具(如 Maven、Gradle)集成良好,提供了丰富的运行和报告功能。
JUnit 5 通过其模块化设计、丰富的功能和灵活的扩展性,为现代 Java 开发提供了全面而强大的测试解决方案。尽管存在一定的学习曲线和配置复杂性,但其优点远远超过缺点,使得它成为当前最受欢迎和推荐的 Java 测试框架之一。
组成部分
- JUnit 5 由三个子项目组成:
JUnit Platform、JUnit Jupiter和JUnit Vintage。这种模块化设计使得框架更加灵活和可扩展。
JUnit平台(JUnit Platform)
- 在 JVM 上启动测试框架,所有的执行都离不开 JUnit 的使用。
- 使用 TestEngine API 来构建在 JUnit 平台上运行的测试框架。
- 定义了公共的测试引擎 API ,允许第三方测试框架集成。
JUnit Jupiter
- 混合了用于编写测试的新编程模型和用于扩展的扩展模型。
- 提供新的注解(如 @Test , @BeforeEach , @AfterEach ),断言和假设( Assertions 和 Assumptions ),以及测试生命周期控制和条件执行功能。
- 支持自定义扩展(通过 Extension API )。
JUnit Vintage
- 使用 JUnit Vintage 提供向上兼容的作用,可以使用之前的版本。
结构图

- JUnit Platform :
IDEs和Build tools(如Maven和Gradle)通过调用JUnit Platform执行。 - TestEngine interface :
JUnit Platform需要TestEngine interface测试引擎接口进行执行。能够调用测试引擎接口的包括JUnit Jupiter(注解)、JUnit Vintage(兼容的版本)、Custom engine(自定义测试引擎)。
环境准备
- Java 环境:教程中使用 JDK11 ,其他 Java 环境也可(如 JDK8)。
- 编辑器:IDEA (推荐) 、Eclipse、VScode。
- 编译依赖:Maven(推荐)、Gradle、Ant。
操作步骤
1.配置 Maven 依赖
- 配置 pom.xml 文件
- 打开 pom.xml
- 复制下边内容到 pom 文件中
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>JUnitTest</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>11</java.version>
<!-- 使用 Java 11 语言特性 ( -source 11 ) 并且还希望编译后的类与 JVM 11 ( -target 11 )兼容,您可以添加以下两个属性,它们是默认属性插件参数的名称-->
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
<!-- 对应junit Jupiter的版本号;放在这里就不需要在每个依赖里面写版本号,导致对应版本号会冲突-->
<junit.jupiter.version>5.8.2</junit.jupiter.version>
<!-- plugins -->
<maven.compiler.version>3.8.1</maven.compiler.version>
<maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
<poi.version>5.2.2</poi.version>
<!-- 断言-->
<hamcrest.version>2.2</hamcrest.version>
<slf4j.version>2.0.0-alpha7</slf4j.version>
<logback.version>1.3.0-alpha16</logback.version>
</properties>
<!-- 物料清单 (BOM)-->
<dependencyManagement>
<dependencies>
<!--当使用 Gradle 或 Maven 引用多个 JUnit 工件时,此物料清单 POM 可用于简化依赖项管理。不再需要在添加依赖时设置版本-->
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit.jupiter.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<!-- 对应添加的依赖的作用范围-->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>${hamcrest.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<!-- <includes>-->
<!-- <include>top/testeru/group/*_Test.class</include>-->
<!-- </includes>-->
<!-- <excludes>-->
<!-- <exclude>com/testeru/suites/cases2/*Test.class</exclude>-->
<!-- <exclude>*Suite*Test</exclude>-->
<!-- </excludes>-->
</configuration>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<!-- 设置jre版本为 11 -->
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<!-- 设置编码为 UTF-8 -->
<encoding>${maven.compiler.encoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.创建项目
- 创建 Maven 项目
- File->New->Project

- 按照下图信息进行创建,根据自己的版本进行修改

- File->Settings 点击

- 1.打开后在搜索框中输入 java 回车
- 2.找到 Build, Execution, Deployment,点击列表中的 Complier 点击 Java Complier
- 3.检查 model 中版本是否匹配

- 4.点击 Javac Options 下方的 model 的加号添加 Model

- 5.检查无误后点击 OK 保存

3.创建测试类
- 在 src->test->java 右键创建测试类

- 输入类名 注意类名要以 Test 结尾 这样才可以被识别为测试文件 输入后回车进行创建

4.编写测试代码
//导入Test模块
import org.junit.jupiter.api.Test;
public class FirstJUnitTest {
//测试方法前需要添加Test注解才可以被识别为测试用例
@Test
void first(){
System.out.print("第一个测试用例");
}
@Test
void second(){
System.out.print("第二个测试用例");
}
}
5.运行测试脚本
运行第一个测试脚本(IDE)
- 单一方法右侧的运行键是运行单个测试用例
- 点击测试类旁的运行执行当前测试类用的所有测试用例

运行第一个测试脚本(mvn 命令)
- 软件下方打开命令行(终端)

- 在当前模块下输入
# 执行项目路径下的所有测试用例
mvn test

- 执行结果

总结
- JUnit 5 由三个子项目组成:
JUnit Platform、JUnit Jupiter和JUnit Vintage。 - 创建测试类时要保证测试类以
Test结尾。 - 测试方法前需要添加
Test注解才可以被识别为测试用例。 - 使用 mvn 命令执行测试用例前,首先保证安装两个对应的 plugin,其次要在对应 module 路径下执行 mvn test 。