解决@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
相关产品推荐
相关产品推荐

