一、@ExtendWith 是什么?
@ExtendWith 是 JUnit 5 中用于**注册扩展(Extension)**的注解,允许将自定义或第三方扩展附加到测试类或方法上,以增强测试功能。扩展可以干预测试生命周期(如初始化、执行、清理),或提供依赖注入、条件测试等能力。
二、核心概念
1. 扩展(Extension)
- 实现特定接口(如
BeforeEachCallback、ParameterResolver)的类。 - 通过干预 JUnit 生命周期或提供参数解析来扩展测试行为。
2. 常用扩展接口
| 接口 | 说明 |
|---|---|
BeforeEachCallback |
在 @BeforeEach 方法前执行逻辑 |
AfterEachCallback |
在 @AfterEach 方法后执行逻辑 |
BeforeAllCallback |
在 @BeforeAll 方法前执行逻辑 |
AfterAllCallback |
在 @AfterAll 方法后执行逻辑 |
ParameterResolver |
解析测试方法或构造函数的参数(依赖注入) |
TestExecutionCondition |
动态决定是否执行测试(条件测试) |
3. 作用域
- 类级别:通过
@ExtendWith注解在测试类上,影响类中所有测试方法。 - 方法级别:通过
@ExtendWith注解在测试方法上,仅影响该方法。
三、使用场景
- 依赖注入
自动注入测试所需的资源(如数据库连接、Mock 对象)。 - 条件测试
根据环境变量或配置动态跳过某些测试。 - 资源管理
自动创建和清理临时文件、目录或网络连接。 - 监控与日志
记录测试执行时间、失败信息等。 - 集成第三方框架
如 Spring 的SpringExtension、Mockito 的MockitoExtension。
四、使用步骤
1. 添加扩展依赖
以 Maven 为例,若使用第三方扩展(如 Mockito):
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
2. 注册扩展
在测试类或方法上添加 @ExtendWith:
// 类级别扩展
@ExtendWith(MockitoExtension.class)
class MyTestClass {
// ...
}
// 方法级别扩展
class MyTestClass {
@Test
@ExtendWith(CustomExtension.class)
void myTest() {
// ...
}
}

最低0.47元/天 解锁文章
1273

被折叠的 条评论
为什么被折叠?



