A runner for unit tests, intended for testing Quarkus rather than for end user consumption.
npx @tessl/cli install tessl/maven-io-quarkus--quarkus-junit5-internal@3.23.0An internal JUnit 5 test framework specifically designed for testing the Quarkus framework itself, rather than for end-user consumption. It provides specialized testing utilities, production mode test runners, and integration with Quarkus-specific testing features including build chain management, continuous testing support, and artifact result handling.
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-internal</artifactId>
<version>3.23.0</version>
</dependency>import io.quarkus.test.QuarkusUnitTest;
import io.quarkus.test.QuarkusDevModeTest;
import io.quarkus.test.QuarkusProdModeTest;Common annotations:
import io.quarkus.test.LogFile;
import io.quarkus.test.ProdBuildResults;Utilities and support classes:
import io.quarkus.test.ClearCache;
import io.quarkus.test.LogCollectingTestResource;
import io.quarkus.test.ContinuousTestingTestUtils;import io.quarkus.test.QuarkusUnitTest;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.Test;
public class MyQuarkusTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(MyService.class))
.withConfigurationResource("application-test.properties");
@Test
public void testSomething() {
// Test Quarkus application functionality
}
}The Quarkus JUnit 5 Internal framework is built around several key components:
QuarkusUnitTest, QuarkusDevModeTest, QuarkusProdModeTest) that handle different testing scenariosCore JUnit 5 extension for testing Quarkus internals and extensions with full build customization, dependency management, and configuration override capabilities.
public class QuarkusUnitTest implements BeforeAllCallback, AfterAllCallback,
BeforeEachCallback, AfterEachCallback, ParameterResolver, InvocationInterceptor {
public QuarkusUnitTest();
public static QuarkusUnitTest withSecuredConnection();
public Supplier<JavaArchive> getArchiveProducer();
public QuarkusUnitTest setArchiveProducer(Supplier<JavaArchive> archiveProducer);
public QuarkusUnitTest withApplicationRoot(Consumer<JavaArchive> applicationRootConsumer);
public QuarkusUnitTest withEmptyApplication();
public QuarkusUnitTest addBuildChainCustomizer(Consumer<BuildChainBuilder> customizer);
public QuarkusUnitTest overrideConfigKey(String key, String value);
public QuarkusUnitTest setExpectedException(Class<? extends Throwable> expectedException);
}Test extension for black-box testing of Quarkus development mode with file modification support, hot reload testing, and build system integration.
public class QuarkusDevModeTest implements BeforeAllCallback, AfterAllCallback,
BeforeEachCallback, AfterEachCallback, TestInstanceFactory {
public QuarkusDevModeTest();
public QuarkusDevModeTest setArchiveProducer(Supplier<JavaArchive> archiveProducer);
public QuarkusDevModeTest withApplicationRoot(Consumer<JavaArchive> applicationRootConsumer);
public void modifySourceFile(String relativePath, Function<String, String> mutator);
public void modifyFile(String relativePath, Function<String, String> mutator);
public void addResourceFile(String path, String data);
public List<LogRecord> getLogRecords();
}Test extension for producing and testing production-mode jars with native build support, runtime configuration, and process lifecycle management.
public class QuarkusProdModeTest implements BeforeAllCallback, AfterAllCallback,
BeforeEachCallback, TestWatcher, InvocationInterceptor {
public QuarkusProdModeTest();
public QuarkusProdModeTest setArchiveProducer(Supplier<JavaArchive> archiveProducer);
public QuarkusProdModeTest setBuildNative(boolean buildNative);
public QuarkusProdModeTest setRun(boolean run);
public void start();
public void stop();
public String getStartupConsoleOutput();
public Integer getExitCode();
}Comprehensive logging collection, filtering, and test resource management for capturing and analyzing test execution logs.
public class LogCollectingTestResource implements QuarkusTestResourceLifecycleManager {
public static LogCollectingTestResource current();
public List<LogRecord> getRecords();
public void clear();
}
public class InMemoryLogHandler extends ExtHandler {
public InMemoryLogHandler(Predicate<LogRecord> predicate);
public List<LogRecord> getRecords();
}Support for customizing Quarkus build chains during testing, including build steps, producers, and consumers for comprehensive build testing.
public abstract class ProdModeTestBuildStep implements BuildStep {
public ProdModeTestBuildStep(Map<String, Object> testContext);
public Map<String, Object> getTestContext();
}
public class ProdModeTestBuildChainBuilderConsumer implements Consumer<BuildChainBuilder> {
public ProdModeTestBuildChainBuilderConsumer(String buildStepClassName,
List<String> producesClassNames, List<String> consumesClassNames,
Map<String, Object> testContext);
public void accept(BuildChainBuilder builder);
}Data containers and utility classes for managing test results, continuous testing support, and cache management.
public class ProdModeTestResults {
public ProdModeTestResults(Path buildDir, Path builtArtifactPath,
List<ArtifactResult> results, List<LogRecord> retainedBuildLogRecords);
public Path getBuildDir();
public Path getBuiltArtifactPath();
public List<ArtifactResult> getResults();
}
public class ContinuousTestingTestUtils {
public TestStatus waitForNextCompletion();
public static String appProperties(String... props);
}
public class ClearCache {
public static void clearCaches();
}Result Containers and Utilities
Marker annotation for injecting log file paths into test fields.
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogFile {
}Marker annotation for injecting production build results into test fields.
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ProdBuildResults {
}public static class BuildChainCustomizerEntry {
public BuildChainCustomizerEntry(Class<? extends ProdModeTestBuildStep> buildStepClass,
List<Class<? extends BuildItem>> produces, List<Class<? extends BuildItem>> consumes);
public Class<? extends BuildStep> getBuildStepClass();
public List<Class<? extends BuildItem>> getProduces();
public List<Class<? extends BuildItem>> getConsumes();
}public static class TestStatus {
public TestStatus();
public TestStatus(long lastRun, long running, long testsRun, long testsPassed,
long testsFailed, long testsSkipped, long totalTestsPassed,
long totalTestsFailed, long totalTestsSkipped);
// Getter and setter methods for all status fields
public long getLastRun();
public void setLastRun(long lastRun);
public long getRunning();
public void setRunning(long running);
public String toString();
}