JUnit 6 教程及示例

JUnit 6 是 JUnit 5 的现代、完善的演进版,它拥抱 Java 17+,改进了扩展处理,增强了性能,并添加了诸如空值注解和本机 Kotlin 协程支持等新功能。

JUnit6 Logo

JUnit 是 Java(以及 JVM)的事实上的标准测试框架,广泛用于编写自动化单元测试。 随着 JUnit 6 的发布,该框架已进一步成熟为现代、统一的平台。

在底层,JUnit 6 结合了

  • JUnit Platform(测试启动基础设施),
  • JUnit Jupiter(编写新测试的编程和扩展模型),
  • 以及(可选)JUnit Vintage(用于运行遗留 JUnit 3 / JUnit 4 测试)。

JUnit 6.0.1 = JUnit Platform + JUnit Jupiter + JUnit Vintage

1. JUnit 5 与 JUnit 6

下表显示了 JUnit 6 与 JUnit 5 之间的主要区别,并附有示例说明。

特性 / 领域JUnit 5JUnit 6
最低 Java 版本Java 8Java 17
模块 / 平台版本控制虽然所有工件都共享 5.x 版本,但子模块之间存在差异。所有模块都使用单个统一的 6.x 版本,具有同步开发、更轻松的 BOM 管理和可预测的兼容性。
空值注解没有标准的空值注解引入了内置的 @NonNull@Nullable@NullMarked 注解,以改进测试代码的静态代码分析
扩展 API扩展 API 成熟但有时冗长更完善的扩展模型,具有更清晰的生命周期规则、更好的排序语义以及更一致的注释行为。
Vintage 引擎完全可用,可运行 JUnit 3/4 测试仍然可用,但标记为已弃用
动态测试完全支持引擎内部针对动态测试进行了优化。大型动态测试套件具有更高的性能和更清晰的错误报告。
迁移构建文件需要 Jupiter + Platform 依赖使用 junit-bom 作为标准
IDE / 工具历史上需要插件来支持 JUnit 5所有主流 IDE 都原生支持
测试发现和运行时成熟、稳定。由于旧的 Java 兼容性,存在一些反射限制。更高效的发现,更好的并行测试默认设置。
IDE 兼容性强大的 IDE 支持(IntelliJ、Eclipse、VS Code)。IDE 使用适配器来集成 JUnit 5 Platform。IDE 已经更新了内置的 JUnit 6 运行器,完全支持新功能(空值允许性、Kotlin 协程测试、统一报告)。减少了对兼容性层的依赖。
API 清理为了兼容性,保留了遗留 API移除了或简化了未使用的/令人困惑的 API。优先考虑开发人员体验而非向后兼容性。

2. Maven 和 Gradle

如果您正在使用 Maven,这是一个设置 JUnit 6 进行测试的最小 pom.xml 片段。

<project>
  ...
  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>6.0.0</version>  <!-- or latest JUnit 6 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>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0</version> <!-- minimum required for JUnit 6 -->
      </plugin>
    </plugins>
  </build>
  ...
</project>

对于 Gradle,请使用以下配置

需要 Gradle 7.3+,因为 Java 17 是基线。

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation(platform("org.junit:junit-bom:6.0.0"))

    testImplementation("org.junit.jupiter:junit-jupiter")
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

test {
    useJUnitPlatform()
}

3. 一个简单的 JUnit 6 测试

这是一个最小的示例,可以开始使用 JUnit 6。此类运行测试并断言一些基本假设。

package com.howtodoinjava;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;

import static org.junit.jupiter.api.Assertions.*;

public class AppTest {

  @Test
  @DisplayName("Simple test to verify that 1 + 1 equals 2")
  void testAddition() {

    assertEquals(2, 1 + 1);
  }

  @Test
  @DisplayName("Test string equality")
  void testStringEquality() {

    String expected = "Hello World!";
    String actual = "Hello World!";
    assertEquals(expected, actual);
  }

  @Test
  @DisplayName("Test boolean assertion")
  void testBooleanAssertion() {

    assertTrue(true);
    assertFalse(false);
  }

  @Test
  @DisplayName("Test not null assertion")
  void testNotNull() {

    App app = new App();
    assertNotNull(app);
  }
}

4. 结论

JUnit 6 是 JUnit 5 的现代、完善的演进,它拥抱 Java 17+,改进了扩展处理,增强了性能,并添加了新功能,例如空值允许性注释和原生 Kotlin 协程支持。编写测试仍然简单且熟悉,使用相同的 @Test 注释和清晰的断言 API。

祝您学习愉快!!

评论

订阅
通知
0 条评论
最多投票
最新 最旧
内联反馈
查看所有评论

关于我们

HowToDoInJava 提供 Java 和相关技术的教程和操作指南。

它还分享最佳实践、算法和解决方案以及经常被问到的面试题。

我们的博客

REST API 教程

关注我们