1. 引言
在 JUnit 5 中,@RunWith
注解已被更强大的 @ExtendWith
注解取代。不过为了向后兼容,JUnit 5 仍然支持 @RunWith
。本文将探讨在 JUnit 5 框架中使用 @RunWith
注解的场景和注意事项。
2. 使用 JUnit 4 运行器执行测试
通过 @RunWith
注解,我们可以在仅支持 JUnit 4 的环境中运行 JUnit 5 测试。比如在旧版 Eclipse 中:
✅ 适用场景:需要在 JUnit 4 环境中运行 JUnit 5 测试
⚠️ 限制:无法使用 JUnit 5 的新特性
首先创建被测类:
public class Greetings {
public static String sayHello() {
return "Hello";
}
}
然后编写基础 JUnit 5 测试:
public class GreetingsUnitTest {
@Test
void whenCallingSayHello_thenReturnHello() {
assertTrue("Hello".equals(Greetings.sayHello()));
}
}
最后添加注解使其可运行:
@RunWith(JUnitPlatform.class)
public class GreetingsUnitTest {
// ...
}
JUnitPlatform
是基于 JUnit 4 的运行器,允许在 JUnit Platform 上运行测试。但需注意:JUnit 4 不支持新平台的所有特性,因此功能受限。
在 Eclipse 中运行测试时,会显示使用的是 JUnit 4 运行器:
3. 在 JUnit 5 环境中运行测试
在支持 JUnit 5 的环境中(如新版 Eclipse),无需 @RunWith
注解:
public class GreetingsUnitTest {
@Test
void whenCallingSayHello_thenReturnHello() {
assertTrue("Hello".equals(Greetings.sayHello()));
}
}
测试结果会明确显示使用的是 JUnit 5 运行器:
4. 从 JUnit 4 运行器迁移
迁移使用 JUnit 4 运行器的测试时,需用 @ExtendWith
替换 @RunWith
。以 Spring 测试为例:
迁移前:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringUnitTest {
// ...
}
迁移后:
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringUnitTest {
// ...
}
SpringExtension
由 Spring 5 提供,用于将 Spring TestContext 框架集成到 JUnit 5。@ExtendWith
可接受任何实现 Extension
接口的类。
5. 总结
本文探讨了在 JUnit 5 中使用 JUnit 4 的 @RunWith
注解的场景:
- ✅ 在旧环境中运行 JUnit 5 测试
- ❌ 无法使用 JUnit 5 新特性
- ⚠️ 迁移时需替换为
@ExtendWith
完整代码示例可在 GitHub 获取。