Logo
Section 1 / 4

JUnit 4 迁移

理解 JUnit 4 和 JUnit 5 运行时的使用方法。

导入

JUnit 4 迁移

理解 JUnit 4 和 JUnit 5 运行时的使用方法。

概述

如前所述,JUnit Jupiter 和 JUnit Vintage 都运行在相同的平台之上。JUnit Vintage 可以运行 JUnit 4 和 JUnit 3 的测试。JUnit Jupiter 使用了不同的包名,因此不会与现有的 JUnit 4 产生冲突。使用新 JUnit Jupiter 编程模型编写的测试与旧版 JUnit 4 测试可以在同一个项目中共存。如果我们有一个包含 JUnit 4 测试的遗留项目,并希望在 JUnit 5 中利用新的编程模型,那么在升级到 JUnit 5 时有三种选择:

  • 保留原有的 JUnit 4 测试和运行时,仅使用 JUnit 5 平台和 Jupiter 来编写和执行新测试。
  • 使用 JUnit Vintage 运行旧版 JUnit 4 测试,同时使用 JUnit Jupiter 运行新测试。
  • 将旧版 JUnit 4 测试升级为使用 JUnit Jupiter 编程模型,之后仅使用 JUnit Jupiter。

我们使用由 Spring Initializer 创建的 Spring Boot 应用作为遗留应用。接下来将展示如何通过上述三种方式迁移该应用。

JUnit 4 和 5 运行时

该遗留的 Spring Boot 应用已配置了 JUnit 4 并包含一个简单的 JUnit 4 测试。我们可以保持现有配置和测试不变,仅使用 JUnit Jupiter 来编写和执行新测试。只需按照第 3 章(注解、标签与过滤)中的说明配置 JUnit 5 即可。对于 Gradle,在启用 JUnit 5 插件后,标准的 test 任务默认会被禁用。为了运行 JUnit 4 测试,需要在代码中添加如下配置以启用 test 任务。这样就可以通过 Gradle 的 test 任务同时运行 JUnit 4 和 JUnit 5 测试。

1junitPlatform { 2 enableStandardTestTask true 3}

使用 JUnit Vintage

JUnit Vintage 可以运行 JUnit 4 测试。只需向项目添加 JUnit Vintage 引擎依赖,即可自动发现并执行 JUnit 4 测试。对于 Gradle,需要在 build.gradle 文件中添加 JUnit 4 与 JUnit Vintage 的依赖项。例如:

1dependencies { 2 testCompile("junit:junit:4.12") 3 testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0") 4}

添加后,即可使用 Gradle 的 junitPlatformTest 任务来同时运行 JUnit 4 和 JUnit 5 测试。

测试迁移

我们还可以将 JUnit 4 测试升级为使用 JUnit Jupiter。迁移过程应非常顺畅。下表列出了 JUnit 4 与 Jupiter 之间的不同注解:

JUnit 4 与 Jupiter 的不同注解

JUnit 4JUnit Jupiter
@Before@BeforeEach
@After@AfterEach
@BeforeClass@BeforeAll
@AfterClass@AfterAll
@Ignore@Disabled
@Category@Tag
@RunWith@ExtendWith

扩展模型

JUnit 5 中的 TestEngine