You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单元测试中不使用@QuarkusTest即可启动ArC CDI容器?

轻量使用ArC容器进行单元测试的方案

Quarkus 2.8及以上版本官方提供了@ArcTest注解,完全匹配你的需求:仅启动ArC CDI容器,不会初始化完整的Quarkus运行时环境,启动速度和weld-junit相当,且直接使用生产环境的ArC实现,不存在CDI规范兼容差异导致测试和生产行为不一致的问题。

依赖引入

使用JUnit5时仅需引入quarkus-junit5测试依赖即可,Maven配置示例如下:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-junit5</artifactId>
    <scope>test</scope>
</dependency>

测试用例编写

直接在测试类上添加@ArcTest注解,需要用到的Bean、拦截器、装饰器直接通过@Inject注入即可,和常规CDI测试用法完全一致:

import io.quarkus.test.junit.ArcTest;
import javax.inject.Inject;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

@ArcTest
public class CustomInterceptorTest {

    // 注入绑定了对应拦截器/装饰器的业务Bean
    @Inject
    OrderService orderService;

    @Test
    public void testInterceptorLogic() {
        Order testOrder = new Order();
        orderService.create(testOrder);
        // 验证拦截器的日志、权限校验等逻辑是否正常生效
        assertNotNull(testOrder.getCreateTime());
    }
}

常用适配配置

  • 如果需要测试请求域相关的Bean,直接在测试类或方法上添加@ActivateRequestContext注解即可启用请求上下文
  • 可以通过@IgnoredBean注解排除不需要加载的Bean,减少容器启动开销
  • 支持通过测试配置文件指定arc.test.selected-alternatives等参数,自定义CDI替代类、装饰器优先级等规则

如果使用的是2.8以下的低版本Quarkus,也可以使用@QuarkusUnitTest配合配置关闭所有非必要的Quarkus扩展,仅保留ArC核心组件,也能实现类似的轻量测试效果,更推荐升级到高版本直接使用@ArcTest,配置更简单,启动速度更快。

内容的提问来源于stack exchange,提问作者Johannes Hahn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:18:03