无法混合QuarkusUnitTest与QuarkusTestExtension测试的问题咨询
问题原因与解决方案
本质原因
Quarkus不允许在同一个测试执行批次中混合使用QuarkusUnitTest和@QuarkusTest,两者运行机制完全冲突:
QuarkusUnitTest是轻量级单元测试,仅针对扩展的构建步骤(BuildSteps)做验证,不会启动完整的Quarkus应用上下文;@QuarkusTest会启动完整的Quarkus应用实例,加载全量应用配置和上下文。
Quarkus的ExclusivityChecker会检测到这种混合,直接抛出异常阻止执行。
解决办法
1. 拆分测试执行阶段
通过Maven插件将两类测试分开执行:
- 给测试类添加分类注解:
// 给QuarkusUnitTest标记单元测试分类 @Category(UnitTest.class) public class MyExtensionUnitTest extends QuarkusUnitTest { // ...测试逻辑 } // 给@QuarkusTest标记集成测试分类 @Category(IntegrationTest.class) @QuarkusTest public class MyExtensionIntegrationTest { // ...测试逻辑 } - 在
pom.xml中配置插件分别执行不同分类的测试:
执行时,单元测试用<build> <plugins> <!-- 执行单元测试(QuarkusUnitTest) --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <groups>com.your.package.UnitTest</groups> </configuration> </plugin> <!-- 执行集成测试(@QuarkusTest) --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> <configuration> <groups>com.your.package.IntegrationTest</groups> </configuration> </execution> </executions> </plugin> </plugins> </build>mvn test,集成测试用mvn verify。
2. 分离测试目录
把两类测试放到不同目录:
- 将
QuarkusUnitTest保留在默认的src/test/java目录; - 将
@QuarkusTest移到src/it/java集成测试目录; - 配置
maven-failsafe-plugin扫描src/it/java下的测试,这样mvn test只跑单元测试,mvn verify跑集成测试。
3. 调整测试类型(按需)
如果部分测试不需要完整应用上下文,可以将@QuarkusTest改为QuarkusUnitTest;反之,如果测试需要完整应用支撑,也可以把QuarkusUnitTest调整为@QuarkusTest,但要确保测试逻辑适配对应的测试环境。
内容的提问来源于stack exchange,提问作者Skod
相关产品推荐
相关产品推荐

