第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版本LTSJUnit5支持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.xMockito 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驱动测试,构建工具组织整个生命周期。

测试环境三层依赖关系 测试环境三层依赖架构 构建工具层 Maven / Gradle 测试框架层 JUnit Jupiter 5.11 Mock/Stub层 Mockito 5.14 + ByteBuddy 测试用例层 WorkerTest → @Test + @Mock ⚠️ 注意:图中“构建工具层”通过依赖管理将JUnit5和Mockito注入测试类路径

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桩方法的编写。