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

无法混合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:53:20