第1章 · 测试环境搭建:JDK版本、构建工具依赖、IDE插件与版本兼容性
本章目标是为 Worker逻辑的JUnit加Mockito测试案例 课程搭建一个标准、可复现的Java测试环境。Worker类通常依赖外部服务(如数据库、消息队列、REST接口),因此测试框架必须能够隔离这些依赖。我们将依次确定JDK版本范围、配置Maven/Gradle依赖、安装IDE插件、核对JUnit5与Mockito的版本兼容性,并最终形成一套可在开发机与CI流水线上一致执行的测试环境。
核心原则:所有依赖版本必须经过交叉验证,避免因版本不兼容导致测试执行异常。本课程所有代码均在以下环境中验证通过。
1.1 JDK版本选择
JUnit5平台要求JDK 8及以上,但结合Mockito 5.x和现代CI/CD实践,我们推荐使用 JDK 11 (LTS) 或 JDK 17 (LTS)。JDK 21 (LTS) 已可用于生产,但部分旧版Mockito尚存在模块化兼容性问题。下表给出当前主流JDK版本的适用性评估:
| JDK版本 | LTS | JUnit5支持 | Mockito 5.x兼容 | 本课程推荐 |
|---|---|---|---|---|
| 8 | 是 | 完全支持 | 完全支持 | 不推荐(已过时) |
| 11 | 是 | 完全支持 | 完全支持 | 首选 |
| 17 | 是 | 完全支持 | 完全支持 | 强烈推荐 |
| 21 | 是 | 完全支持 | 基本支持(需Mockito 5.5+) | 可选(需注意模块化配置) |
选择建议:如果团队已有JDK 11环境,无需升级;新建项目直接使用JDK 17。本课程后续示例均基于JDK 17 + Mockito 5.14.2 + JUnit 5.11.0 验证。
1.2 构建工具与依赖配置
Maven和Gradle均可使用,本章分别给出最新稳定配置。核心依赖包括:junit-jupiter(JUnit5引擎)、mockito-core(Mockito核心)以及mockito-junit-jupiter(Mockito与JUnit5的集成扩展)。
1.2.1 Maven (pom.xml)
在 <properties> 中统一管理版本号,确保所有模块使用相同版本。以下为完整的依赖配置片段:
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.jupiter.version>5.11.0</junit.jupiter.version>
<mockito.version>5.14.2</mockito.version>
</properties>
<dependencies>
<!-- JUnit5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<!-- Mockito -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<!-- Mockito JUnit5 集成扩展 -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
1.2.2 Gradle (build.gradle)
对于Gradle项目,使用 testImplementation 配置测试依赖。以下为与Maven等效的配置:
plugins {
id 'java'
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
dependencies {
testImplementation platform('org.junit:junit-bom:5.11.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.mockito:mockito-core:5.14.2'
testImplementation 'org.mockito:mockito-junit-jupiter:5.14.2'
}
test {
useJUnitPlatform()
}
常见错误:遗漏 mockito-junit-jupiter 会导致 @ExtendWith(MockitoExtension.class) 无法解析,测试运行时报 NoSuchMethodError 或 ExtensionNotRegisteredException。
1.3 IDE插件与配置
多数现代IDE已内建JUnit5支持,但建议主动检查以下插件状态:
- IntelliJ IDEA Ultimate / Community:内置JUnit5引擎,无需额外插件。建议升级至2024.1+以支持Mockito 5.x的精确调试。
- Eclipse IDE:需安装 Eclipse JUnit 5 Support(可从Marketplace安装)。若使用Gradle,还需 Buildship Gradle Integration。
- VS Code:安装 Extension Pack for Java,并配置
java.test.config为JUnit5。
推荐在IDE中启用 Run with coverage(覆盖率),以便直观观察Mockito的桩方法是否被调用。
1.4 JUnit5与Mockito版本兼容性矩阵
版本不匹配是测试环境中最常见的故障根源。以下矩阵列出本课程已验证的兼容组合:
| JUnit5版本 | Mockito 4.x | Mockito 5.x (≤5.4) | Mockito 5.x (≥5.5) | 备注 |
|---|---|---|---|---|
| 5.8.x - 5.10.x | ✅ 完全兼容 | ✅ 兼容 | ✅ 兼容 | Mockito 5.0-5.4使用旧版ByteBuddy |
| 5.11.x | ⚠️ 部分兼容(需Mockito 4.11+) | ✅ 兼容 | ✅ 完全兼容(推荐) | 本课程使用此组合 |
| 5.12.x (预览) | ⚠️ 未全面测试 | ⚠️ 未全面测试 | ✅ 兼容 | 建议保持Mockito与JUnit5同步升级 |
版本锁定规则:
• 始终将 junit-jupiter 与 mockito-junit-jupiter 放在同一 pom 或 build.gradle 中管理版本。
• 避免混合使用JUnit5与Mockito 3.x(已终结)。
• 使用Gradle BOM或Maven <dependencyManagement> 确保传递依赖版本一致。
1.5 环境验证:三层依赖关系图
下图展示了测试环境的核心依赖层次。Worker类通过Mockito隔离外部依赖,由JUnit5驱动测试,构建工具组织整个生命周期。
1.6 环境验证清单
请在终端执行以下命令验证环境是否正确:
# 检查JDK版本(输出应为11或17或21)
java -version
# Maven版本(确保已配置上述依赖)
mvn --version
# 执行测试验证(若项目已创建)
mvn test -Dtest=*Test -pl . --also-make
# Gradle版本验证
gradle --version
# 执行测试
gradle test --tests "*Test"
快速自检:如果 mvn test 或 gradle test 成功运行任意JUnit5测试,且控制台输出包含「JUnit Jupiter」和「Mockito」相关日志,则表示环境搭建成功。
至此,测试环境搭建完成。第2章将聚焦于Worker类的设计、要测试的业务场景以及第一个Mockito桩方法的编写。