-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Describe the bug
I can not mock rest clients. Quarkus complaints about the uri not being set. But I do not want to set the uri, since I am mocking the result of the client anyway.
@QuarkusTest
class GreetingResourceTest {
@InjectMock
@RestClient
MyRemoteService myRemoteService;
[...]
Results in the log from below.
I can work around this by adding
%test.quarkus.rest-client."org.acme.MyRemoteService".url=http://localhost:8080/i-do-not-exist
To my application.properties.
See doc: https://quarkus.io/guides/rest-client#mocking-with-injectmock
Expected behavior
I can mock quarkus rest clients inn my quarkustest
Actual behavior
2025-04-15 17:51:02,863 INFO [io.quarkus] (main) rest-client-mock 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.21.2) started in 4.370s. Listening on: http://localhost:8081
2025-04-15 17:51:02,867 INFO [io.quarkus] (main) Profile test activated.
2025-04-15 17:51:02,867 INFO [io.quarkus] (main) Installed features: [cdi, rest, rest-client, rest-client-jackson, smallrye-context-propagation, vertx]
org.junit.jupiter.api.extension.TestInstantiationException: Failed to create test instance
at io.quarkus.test.junit.QuarkusTestExtension.initTestState(QuarkusTestExtension.java:767)
at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:733)
at java.base/java.util.Optional.orElseGet(Optional.java:364)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at io.quarkus.runner.bootstrap.RunningQuarkusApplicationImpl.instance(RunningQuarkusApplicationImpl.java:90)
at io.quarkus.test.junit.QuarkusTestExtension.createActualTestInstance(QuarkusTestExtension.java:773)
at io.quarkus.test.junit.QuarkusTestExtension.initTestState(QuarkusTestExtension.java:761)
... 4 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at io.quarkus.runner.bootstrap.RunningQuarkusApplicationImpl.instance(RunningQuarkusApplicationImpl.java:88)
... 6 more
Caused by: java.lang.RuntimeException: Error injecting org.acme.GreetingResource org.acme.GreetingResourceTest.greetingResource
at org.acme.GreetingResourceTest_Bean.doCreate(Unknown Source)
at org.acme.GreetingResourceTest_Bean.create(Unknown Source)
at org.acme.GreetingResourceTest_Bean.get(Unknown Source)
at org.acme.GreetingResourceTest_Bean.get(Unknown Source)
at io.quarkus.arc.impl.InstanceImpl.getBeanInstance(InstanceImpl.java:325)
at io.quarkus.arc.impl.InstanceImpl.getInternal(InstanceImpl.java:309)
at io.quarkus.arc.impl.InstanceImpl.get(InstanceImpl.java:190)
... 8 more
Caused by: java.lang.RuntimeException: Error injecting org.acme.MyRemoteService org.acme.GreetingResource.myRemoteService
at org.acme.GreetingResource_Bean.doCreate(Unknown Source)
at org.acme.GreetingResource_Bean.create(Unknown Source)
at org.acme.GreetingResource_Bean.create(Unknown Source)
at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:119)
at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:35)
at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:32)
at io.quarkus.arc.impl.ComputingCache.computeIfAbsent(ComputingCache.java:69)
at io.quarkus.arc.impl.ComputingCacheContextInstances.computeIfAbsent(ComputingCacheContextInstances.java:19)
at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
at org.acme.GreetingResource_Bean.get(Unknown Source)
at org.acme.GreetingResource_Bean.get(Unknown Source)
... 15 more
Caused by: java.lang.IllegalArgumentException: Unable to determine the proper baseUrl/baseUri. Consider registering using @RegisterRestClient(baseUri="someuri"), @RegisterRestClient(configKey="orkey"), or by adding 'quarkus.rest-client."org.acme.MyRemoteService".url' or 'quarkus.rest-client."org.acme.MyRemoteService".uri' to your Quarkus configuration
at io.quarkus.rest.client.reactive.runtime.RestClientCDIDelegateBuilder.configureBaseUrl(RestClientCDIDelegateBuilder.java:402)
at io.quarkus.rest.client.reactive.runtime.RestClientCDIDelegateBuilder.configureBuilder(RestClientCDIDelegateBuilder.java:78)
at io.quarkus.rest.client.reactive.runtime.RestClientCDIDelegateBuilder.build(RestClientCDIDelegateBuilder.java:73)
at io.quarkus.rest.client.reactive.runtime.RestClientCDIDelegateBuilder.createDelegate(RestClientCDIDelegateBuilder.java:54)
at io.quarkus.rest.client.reactive.runtime.RestClientReactiveCDIWrapperBase.delegate(RestClientReactiveCDIWrapperBase.java:76)
at io.quarkus.rest.client.reactive.runtime.RestClientReactiveCDIWrapperBase.<init>(RestClientReactiveCDIWrapperBase.java:30)
at org.acme.MyRemoteService$$CDIWrapper.<init>(Unknown Source)
at org.acme.MyRemoteService$$CDIWrapper_ClientProxy.<init>(Unknown Source)
at org.acme.MyRemoteService$$CDIWrapper_Bean.proxy(Unknown Source)
at org.acme.MyRemoteService$$CDIWrapper_Bean.get(Unknown Source)
at org.acme.MyRemoteService$$CDIWrapper_Bean.get(Unknown Source)
... 27 more
java.lang.NullPointerException: Cannot invoke "Object.hashCode()" because "key" is null
at java.base/java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:937)
at java.base/java.util.concurrent.ConcurrentHashMap.getOrDefault(ConcurrentHashMap.java:1599)
at io.quarkus.test.junit.mockito.internal.MockitoMocksTracker.getMocks(MockitoMocksTracker.java:25)
at io.quarkus.test.junit.mockito.internal.MockitoMocksTracker.clear(MockitoMocksTracker.java:35)
at io.quarkus.test.junit.mockito.internal.ResetMockitoMocksAfterAllCallback.afterAll(ResetMockitoMocksAfterAllCallback.java:10)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeCallbacks(AbstractTestWithCallbacksExtension.java:162)
at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeAfterAllCallbacks(AbstractTestWithCallbacksExtension.java:100)
at io.quarkus.test.junit.QuarkusTestExtension.runAfterAllCallbacks(QuarkusTestExtension.java:1055)
at io.quarkus.test.junit.QuarkusTestExtension.afterAll(QuarkusTestExtension.java:1023)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
How to Reproduce?
Reproducer:
mvn quarkus:test
Output of uname -a
or ver
MINGW64_NT-10.0-26100 NANBCHL9NG3 3.3.6-341.x86_64 2022-09-05 20:28 UTC x86_64 Msys
Output of java -version
openjdk 21.0.5 2024-10-15 LTS OpenJDK Runtime Environment Temurin-21.0.5+11 (build 21.0.5+11-LTS) OpenJDK 64-Bit Server VM Temurin-21.0.5+11 (build 21.0.5+11-LTS, mixed mode, sharing)
Quarkus version or git rev
3.21.2
Build tool (ie. output of mvnw --version
or gradlew --version
)
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39) Maven home: C:\eclipse\tools\java\maven Java version: 21.0.5, vendor: Eclipse Adoptium, runtime: C:\eclipse\tools\java\21 Default locale: de_DE, platform encoding: UTF-8 OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
Additional information
No response