JUnit 5 简介
JUnit 5 是一个用于 Java 语言的现代单元测试框架。它是广受欢迎的 JUnit 4 的演进版本,并作为编写自动化测试的事实标准融入 Java 生态系统。JUnit 5 不仅仅是一次更新,而是一个完全重新设计的架构,由三个子项目组成:JUnit Platform(测试启动)、JUnit Jupiter(新的编程和扩展模型)和 JUnit Vintage(向后兼容 JUnit 3/4)。
为什么需要 JUnit 5?在现代开发中(尤其是在 TDD——测试驱动开发方法论中),测试不是可选项,而是必经阶段。JUnit 5 允许:
- 自动化代码检查: 一键运行数百个测试。
- 确保回归可靠性: 确保新代码不会破坏旧功能。
- 改进代码设计: 可测试的代码通常更具模块化且耦合度更低。
- 记录行为: 测试作为活文档,展示类或方法应如何工作。
- 集成到 CI/CD: JUnit 5 易于集成到 Maven、Gradle、Jenkins、GitHub Actions 中。
JUnit 5 相比 JUnit 4 的关键创新:新一代注解(@Test、@ParameterizedTest、@Nested)、强大的扩展系统(Extensions)、对 lambda 表达式和流式 API 的支持,以及内置的参数化和动态测试支持。
安装 JUnit 5
由于 Java 是一种编译型语言,安装通过依赖管理器(Maven 或 Gradle)进行。JUnit 5 不能通过 pip 或 npm 安装。以下是两种最流行构建系统的说明。
通过 Maven 安装 (pom.xml)
将以下依赖项添加到您的 pom.xml 文件中。建议使用最新的稳定版本(撰写本文时为 5.11.0,请查看 MVNRepository 上的最新版本)。
<dependencies> <!-- JUnit Jupiter 主模块(包含 API、Engine 和参数化) --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.11.0</version> <scope>test</scope> </dependency> <!-- (可选)用于与 JUnit 4 兼容 --> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.11.0</version> <scope>test</scope> </dependency></dependencies>通过 Gradle 安装 (build.gradle)
在 dependencies 部分添加:
dependencies { testImplementation 'org.junit.jupiter:junit-jupiter:5.11.0' // (可选)用于 JUnit 4 testImplementation 'org.junit.vintage:junit-vintage-engine:5.11.0'}
test { useJUnitPlatform() // 必须启用 JUnit 5}无构建系统安装(纯 Java)
如果您不使用 Maven/Gradle,请从官方仓库下载 JAR 文件并将其添加到项目的 classpath 中。但对于实际项目,强烈不推荐这样做。
快速入门:JUnit 5 的第一个测试
让我们创建一个简单的 Calculator 类并为其编写测试。
1. 待测试类 (Calculator.java):
public class Calculator { public int add(int a, int b) { return a + b; }
public int divide(int a, int