ExtendWith注解

一、@ExtendWith 是什么?

@ExtendWith 是 JUnit 5 中用于**注册扩展(Extension)**的注解,允许将自定义或第三方扩展附加到测试类或方法上,以增强测试功能。扩展可以干预测试生命周期(如初始化、执行、清理),或提供依赖注入、条件测试等能力。


二、核心概念

1. 扩展(Extension)
  • 实现特定接口(如 BeforeEachCallbackParameterResolver)的类。
  • 通过干预 JUnit 生命周期或提供参数解析来扩展测试行为。
2. 常用扩展接口
接口 说明
BeforeEachCallback @BeforeEach 方法前执行逻辑
AfterEachCallback @AfterEach 方法后执行逻辑
BeforeAllCallback @BeforeAll 方法前执行逻辑
AfterAllCallback @AfterAll 方法后执行逻辑
ParameterResolver 解析测试方法或构造函数的参数(依赖注入)
TestExecutionCondition 动态决定是否执行测试(条件测试)
3. 作用域
  • 类级别:通过 @ExtendWith 注解在测试类上,影响类中所有测试方法。
  • 方法级别:通过 @ExtendWith 注解在测试方法上,仅影响该方法。

三、使用场景

  1. 依赖注入
    自动注入测试所需的资源(如数据库连接、Mock 对象)。
  2. 条件测试
    根据环境变量或配置动态跳过某些测试。
  3. 资源管理
    自动创建和清理临时文件、目录或网络连接。
  4. 监控与日志
    记录测试执行时间、失败信息等。
  5. 集成第三方框架
    如 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() {
   
   
        // ...
    }
}

五、示例

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值