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

