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 4 | JUnit Jupiter |
|---|---|
| @Before | @BeforeEach |
| @After | @AfterEach |
| @BeforeClass | @BeforeAll |
| @AfterClass | @AfterAll |
| @Ignore | @Disabled |
| @Category | @Tag |
| @RunWith | @ExtendWith |