Quarkus 3.8测试无quarkus-junit5-mockito扩展,如何Mock外部API?
在Quarkus 3.8中Mock外部API调用的解决方案
问题根源
Quarkus 3.x版本对Mockito相关扩展做了命名调整,原quarkus-junit5-mockito扩展已被统一更名为quarkus-mockito,这就是你找不到旧扩展的原因。
解决步骤
1. 添加正确的Mockito依赖
根据你的构建工具,添加对应的quarkus-mockito测试依赖:
Maven
在pom.xml的<dependencies>中加入:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-mockito</artifactId> <scope>test</scope> </dependency>
Gradle
在build.gradle的dependencies中加入:
testImplementation 'io.quarkus:quarkus-mockito'
2. 结合QuarkusMock与Mockito实现Mock
以RestClient Reactive为例,按照官方指南思路结合Mockito完成Mock:
假设你有一个RestClient接口:
@RegisterRestClient(baseUri = "https://external-api.com") public interface ExternalApiClient { @GET @Path("/data") String fetchData(); }
测试类中可这样Mock:
import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.mockito.QuarkusMock; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.mockito.Mockito.when; import static org.junit.jupiter.api.Assertions.assertEquals; @QuarkusTest public class ExternalApiTest { @Inject ExternalApiClient externalApiClient; @BeforeEach void setupMock() { // 创建Mock实例 ExternalApiClient mockClient = org.mockito.Mockito.mock(ExternalApiClient.class); // 定义Mock行为 when(mockClient.fetchData()).thenReturn("Mocked response from external API"); // 将Mock安装到Quarkus容器 QuarkusMock.installMockForType(mockClient, ExternalApiClient.class); } @Test void testExternalApiCall() { String response = externalApiClient.fetchData(); assertEquals("Mocked response from external API", response); } }
注意事项
- 测试类必须添加
@QuarkusTest注解,确保Quarkus测试容器正确加载并应用Mock。 - 若使用RestClient Reactive,
quarkus-mockito已包含所需的Mockito集成能力,无需额外扩展。
内容的提问来源于stack exchange,提问作者dkoci
相关产品推荐
相关产品推荐

