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

解决@QuarkusTest与@QuarkusIntegrationTest混用Kafka服务时连接器被覆盖问题

解决Quarkus集成测试中内存连接器覆盖Kafka TestContainer的问题

问题场景

你的Quarkus 3项目里存在两类测试:

  • 部分@QuarkusTest依赖smallrye-reactive-messaging-in-memory组件,通过自定义@QuarkusTestResource(实现QuarkusTestResourceLifecycleManager接口)将消息入站通道切换为内存连接器
  • 另有一个@QuarkusIntegrationTest使用Kafka TestContainer作为消息连接器

启动集成测试时,出现Kafka连接器被内存连接器覆盖的问题,导致测试无法正常使用Kafka资源。

问题根源

带有@QuarkusTestResource的测试类未做隔离配置,Quarkus默认会将该测试资源全局复用——包括在@QuarkusIntegrationTest中也会加载这个资源,从而覆盖了Kafka连接器的配置。

解决方案

在定义@QuarkusTestResource时,添加restrictToAnnotatedClass = true参数,将该测试资源限制为仅作用于当前标注的测试类,避免被其他测试(包括集成测试)复用:

@QuarkusTestResource(value = YourMemoryConnectorTestResource.class, restrictToAnnotatedClass = true)
public class YourUnitTestClass {
    // 测试代码
}

配置完成后,只有标注了该@QuarkusTestResource的@QuarkusTest类会使用内存连接器,@QuarkusIntegrationTest则会正常加载Kafka TestContainer的配置,不会被覆盖。

内容的提问来源于stack exchange,提问作者Romain Wilbert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:52:04