-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Describe the bug
Hi
When developing a command line application, I am facing an issue with dev mode. The tests can't run in that context. They work fine otherwise.
It seems related to #46469 and #48014. I reproduced on 3.26.
Expected behavior
quarkus test
that runs my tests
Actual behavior
2025-08-29 10:52:18,312 ERROR [io.qua.test] (Test runner thread) ==================== TEST REPORT #1 ====================
2025-08-29 10:52:18,312 ERROR [io.qua.test] (Test runner thread) Test GreetingMainTest failed
: org.junit.jupiter.engine.execution.ConditionEvaluationException: Failed to evaluate condition [io.quarkus.test.junit.QuarkusMainTestExtension]: Internal error: Test class was loaded with an unexpected classloader or the thread context classloader was incorrect.
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1685)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: java.lang.IllegalStateException: Internal error: Test class was loaded with an unexpected classloader or the thread context classloader was incorrect.
at io.quarkus.test.junit.AbstractJvmQuarkusTestExtension.evaluateExecutionCondition(AbstractJvmQuarkusTestExtension.java:204)
at io.quarkus.test.junit.QuarkusMainTestExtension.evaluateExecutionCondition(QuarkusMainTestExtension.java:401)
... 14 more
Caused by: java.util.NoSuchElementException: SRCFG00027: Could not find a mapping for io.quarkus.deployment.dev.testing.TestConfig
at io.smallrye.config.SmallRyeConfig.getConfigMapping(SmallRyeConfig.java:647)
at io.smallrye.config.SmallRyeConfig.getConfigMapping(SmallRyeConfig.java:637)
at io.quarkus.test.junit.AbstractJvmQuarkusTestExtension.evaluateExecutionCondition(AbstractJvmQuarkusTestExtension.java:164)
... 15 more
2025-08-29 10:52:18,313 ERROR [io.qua.test] (Test runner thread) Test testLaunchCommand(LaunchResult) failed
: org.junit.jupiter.engine.execution.ConditionEvaluationException: Failed to evaluate condition [io.quarkus.test.junit.QuarkusMainTestExtension]: Internal error: Test class was loaded with an unexpected classloader or the thread context classloader was incorrect.
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1685)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: java.lang.IllegalStateException: Internal error: Test class was loaded with an unexpected classloader or the thread context classloader was incorrect.
at io.quarkus.test.junit.AbstractJvmQuarkusTestExtension.evaluateExecutionCondition(AbstractJvmQuarkusTestExtension.java:204)
at io.quarkus.test.junit.QuarkusMainTestExtension.evaluateExecutionCondition(QuarkusMainTestExtension.java:401)
... 14 more
Caused by: java.util.NoSuchElementException: SRCFG00027: Could not find a mapping for io.quarkus.deployment.dev.testing.TestConfig
at io.smallrye.config.SmallRyeConfig.getConfigMapping(SmallRyeConfig.java:647)
at io.smallrye.config.SmallRyeConfig.getConfigMapping(SmallRyeConfig.java:637)
at io.quarkus.test.junit.AbstractJvmQuarkusTestExtension.evaluateExecutionCondition(AbstractJvmQuarkusTestExtension.java:164)
... 15 more
2025-08-29 10:52:18,314 ERROR [io.qua.test] (Test runner thread) >>>>>>>>>>>>>>>>>>>> Summary: <<<<<<<<<<<<<<<<<<<<
GreetingMainTest Failed to evaluate condition [io.quarkus.test.junit.QuarkusMainTestExtension]: Internal error: Test class was loaded with an unexpected classloader or the thread context classloader was incorrect.
testLaunchCommand(LaunchResult) Failed to evaluate condition [io.quarkus.test.junit.QuarkusMainTestExtension]: Internal error: Test class was loaded with an unexpected classloader or the thread context classloader was incorrect.
2025-08-29 10:52:18,314 ERROR [io.qua.test] (Test runner thread) >>>>>>>>>>>>>>>>>>>> 1 TEST FAILED <<<<<<<<<<<<<<<<<<<<
How to Reproduce?
Here is a reproducer.
My use case is any QuarkusMainTest for a command line application. Tests run fine in IDE, run fine in Maven. But fail in dev mode.
To reproduce take quarkus-quickstarts/getting-started-command-mode
And add a test:
package org.acme.getting.started.commandmode;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import io.quarkus.test.junit.main.Launch;
import io.quarkus.test.junit.main.LaunchResult;
import io.quarkus.test.junit.main.QuarkusMainTest;
@QuarkusMainTest
public class GreetingMainTest {
@Test
@Launch(value = {}, exitCode = 0)
public void testLaunchCommand(LaunchResult result) {
Assertions.assertNotNull(String.valueOf(result.getOutput()));
}
}
Then when you do mvn test
it works fine.
But if you do quarkus test
you get an error
2025-08-29 10:52:18,314 ERROR [io.qua.test] (Test runner thread) >>>>>>>>>>>>>>>>>>>> Summary: <<<<<<<<<<<<<<<<<<<<
GreetingMainTest Failed to evaluate condition [io.quarkus.test.junit.QuarkusMainTestExtension]: Internal error: Test class was loaded with an unexpected classloader or the thread context classloader was incorrect.
testLaunchCommand(LaunchResult) Failed to evaluate condition [io.quarkus.test.junit.QuarkusMainTestExtension]: Internal error: Test class was loaded with an unexpected classloader or the thread context classloader was incorrect.
2025-08-29 10:52:18,314 ERROR [io.qua.test] (Test runner thread) >>>>>>>>>>>>>>>>>>>> 1 TEST FAILED <<<<<<<<<<<<<<<<<<<<
Output of uname -a
or ver
Darwin xxx 24.6.0 Darwin Kernel Version 24.6.0: Mon Jul 14 11:30:40 PDT 2025; root:xnu-11417.140.69~1/RELEASE_ARM64_T6041 arm64
Output of java -version
openjdk version "24.0.2" 2025-07-15 OpenJDK Runtime Environment GraalVM CE 24.0.2+11.1 (build 24.0.2+11-jvmci-b01) OpenJDK 64-Bit Server VM GraalVM CE 24.0.2+11.1 (build 24.0.2+11-jvmci-b01, mixed mode, sharing)
Quarkus version or git rev
3.26
Build tool (ie. output of mvnw --version
or gradlew --version
)
mvn 3.9.9
Additional information
No response