Quarkus v3.3集成MongoDB的集成测试配置及报错解决
问题解决与集成测试配置方案
一、修复"No RestClientBuilderResolver implementation found!"错误
这个错误的核心原因是测试类路径中缺少REST Client Reactive的测试支持依赖,或是未通过Quarkus测试注解正确初始化上下文。
解决步骤:
- 在
pom.xml中添加测试依赖:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest-client-reactive</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> <scope>test</scope> </dependency>
- 确保测试类添加
@QuarkusTest注解,该注解会自动初始化Quarkus测试上下文,加载必要的Resolver实现:
import io.quarkus.test.junit.QuarkusTest; import org.junit.jupiter.api.Test; @QuarkusTest public class MyRestServiceIT { // 测试代码逻辑 }
二、Quarkus 3.3 + MongoDB Panache 完整集成测试配置
1. 完整依赖配置(pom.xml片段)
在现有依赖基础上,补充测试核心依赖:
<!-- 测试核心依赖 --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-test-mongodb</artifactId> <scope>test</scope> </dependency> <!-- 容器化测试依赖(可选,用于验证镜像运行) --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-test-containers</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>mongodb</artifactId> <scope>test</scope> </dependency>
2. 测试环境配置(src/test/resources/application.properties)
配置测试用MongoDB,Quarkus会自动适配嵌入式实例或Testcontainer:
# 测试MongoDB连接配置 quarkus.mongodb.connection-string=mongodb://localhost:27017 quarkus.mongodb.database=test-db # 非容器化测试时禁用镜像自动构建 quarkus.container-image.build=false
3. 编写集成测试用例
示例1:REST服务与MongoDB交互测试
import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.is; @QuarkusTest public class UserResourceIT { @Test public void testCreateAndGetUser() { // 发送POST请求创建用户 RestAssured.given() .contentType("application/json") .body("{\"name\": \"Test User\", \"email\": \"test@example.com\"}") .when().post("/api/users") .then().statusCode(201); // 验证GET请求返回数据正确性 RestAssured.when().get("/api/users") .then().statusCode(200) .body("size()", is(1)) .body("[0].name", is("Test User")); } }
示例2:容器化应用验证测试(可选)
如果需要验证Docker镜像的运行状态,结合Testcontainers实现:
import io.quarkus.test.container.QuarkusContainer; import io.quarkus.test.junit.QuarkusTest; import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.is; @QuarkusTest public class ContainerizedAppIT { @Test public void testContainerizedApp() { // 构建并启动Quarkus容器实例 try (QuarkusContainer container = new QuarkusContainer()) { container.start(); // 通过容器映射端口发送健康检查请求 RestAssured.given() .baseUri("http://" + container.getHost() + ":" + container.getFirstMappedPort()) .when().get("/api/health") .then().statusCode(200) .body("status", is("UP")); } } }
4. 运行测试
执行Maven命令启动测试:
mvn clean verify
该命令会自动执行单元测试与集成测试,同时启动测试用MongoDB实例(依赖配置自动适配)。
内容的提问来源于stack exchange,提问作者user1340123
相关产品推荐
相关产品推荐

