Skip to content

@QuarkusMainTest fails with classloader error with continuous testing #49780

@fabricepipart1a

Description

@fabricepipart1a

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions