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

@QuarkusIntegrationTest多测试类运行时QuarkusBindException问题求助

解决Quarkus集成测试端口占用问题

方案1:复用同一个Quarkus应用实例

Quarkus支持在集成测试中复用单个应用实例,只需在所有集成测试类上添加@TestInstance(Lifecycle.PER_CLASS)注解,可通过基类统一配置:

import org.junit.jupiter.api.TestInstance
import io.quarkus.test.junit.QuarkusIntegrationTest

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@QuarkusIntegrationTest
abstract class BaseIntegrationTest

所有集成测试类继承该基类即可共享同一个应用实例:

class UserIntegrationTest : BaseIntegrationTest() {
    // 测试方法
}

class OrderIntegrationTest : BaseIntegrationTest() {
    // 测试方法
}

方案2:修正端口配置+配置Failsafe串行执行

你之前设置的test-port:0是错误的配置项,正确的随机端口配置应为:

quarkus:
  http:
    port: 0

同时在pom.xml中配置Maven Failsafe插件串行执行测试,确保每个测试类执行后销毁JVM进程:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${failsafe.version}</version>
            <configuration>
                <parallel>none</parallel>
                <forkCount>1</forkCount>
                <reuseForks>false</reuseForks>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

方案3:手动强制关闭应用实例

若无法复用实例,可在每个测试类中添加@AfterAll方法,确保测试结束后彻底关闭Quarkus:

import io.quarkus.test.junit.QuarkusIntegrationTest
import org.junit.jupiter.api.AfterAll
import io.quarkus.runtime.Quarkus

@QuarkusIntegrationTest
class UserIntegrationTest {

    @AfterAll
    fun shutDownQuarkus() {
        Quarkus.stop()
    }

    // 测试方法
}

内容的提问来源于stack exchange,提问作者Paul Selle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:46:37