A runner for unit tests, intended for testing Quarkus rather than for end user consumption.
—
The QuarkusProdModeTest class provides testing capabilities for production-mode jars with native build support, runtime configuration, and process lifecycle management.
public class QuarkusProdModeTest implements BeforeAllCallback, AfterAllCallback,
BeforeEachCallback, TestWatcher, InvocationInterceptor {
public QuarkusProdModeTest();
}Configure the application archive:
public Supplier<JavaArchive> getArchiveProducer();
public QuarkusProdModeTest setArchiveProducer(Supplier<JavaArchive> archiveProducer);
public QuarkusProdModeTest withApplicationRoot(Consumer<JavaArchive> applicationRootConsumer);
public QuarkusProdModeTest withEmptyApplication();Add build chain customizers and custom resources:
public QuarkusProdModeTest addBuildChainCustomizerEntries(BuildChainCustomizerEntry entry);
public QuarkusProdModeTest addCustomResourceEntry(Path outputPath, String classPathLocation);Configure application metadata:
public QuarkusProdModeTest setApplicationName(String applicationName);
public QuarkusProdModeTest setApplicationVersion(String applicationVersion);Configure build options:
public QuarkusProdModeTest setBuildNative(boolean buildNative);
public QuarkusProdModeTest setRun(boolean run);Configure runtime behavior:
public QuarkusProdModeTest setJVMArgs(List<String> jvmArgs);
public QuarkusProdModeTest setRuntimeProperties(Map<String, String> runtimeProperties);Configure logging behavior:
public QuarkusProdModeTest setLogFileName(String logFileName);
public QuarkusProdModeTest setLogRecordPredicate(Predicate<LogRecord> predicate);Configure forced dependencies:
public QuarkusProdModeTest setForcedDependencies(List<Dependency> forcedDependencies);Control application process lifecycle:
public QuarkusProdModeTest setExpectExit(boolean expectExit);
public void start();
public void stop();Configure build and runtime exception handling:
public QuarkusProdModeTest assertBuildException(Consumer<Throwable> exceptionAssert);
public QuarkusProdModeTest setExpectedException(Class<? extends Throwable> expectedException);Access application output and exit status:
public String getStartupConsoleOutput();
public Integer getExitCode();Override configuration keys and provide resources:
public QuarkusProdModeTest withConfigurationResource(String resourceName);
public QuarkusProdModeTest overrideConfigKey(String propertyKey, String propertyValue);
public QuarkusProdModeTest setCommandLineParameters(String... commandLineParameters);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 String BUILD_CONTEXT_CUSTOM_SOURCES_PATH_KEY = "customSourcesDir";Key for custom sources directory in build context.
import io.quarkus.test.QuarkusProdModeTest;
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 ProdModeTest {
@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(MyResource.class))
.setRun(true);
@Test
public void testProductionBuild() {
// Test production mode functionality
}
}@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(MyResource.class))
.setBuildNative(true)
.setRun(true);@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(MyService.class))
.setRuntimeProperties(Map.of(
"quarkus.log.level", "DEBUG",
"app.environment", "test"
))
.setJVMArgs(List.of("-Xmx512m", "-Dfile.encoding=UTF-8"));@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(MyService.class))
.addBuildChainCustomizerEntries(new QuarkusProdModeTest.BuildChainCustomizerEntry(
MyBuildStep.class,
List.of(MyBuildItem.class),
List.of(ApplicationArchivesBuildItem.class)
));
public static class MyBuildStep extends ProdModeTestBuildStep {
public MyBuildStep(Map<String, Object> testContext) {
super(testContext);
}
@Override
public void execute(BuildContext context) {
// Custom build logic
}
}@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(MyService.class))
.setRun(false); // Build only, don't run
@Test
public void testBuildOnly() {
// Application is built but not started
// Can examine build artifacts, logs, etc.
}
@Test
public void testManualLifecycle() {
// Manual control over application lifecycle
config.start();
// Test running application
// ...
config.stop();
}@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(FailingService.class))
.assertBuildException(throwable -> {
assertTrue(throwable.getMessage().contains("Expected build failure"));
});@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(ExitingService.class))
.setExpectExit(true);
@Test
public void testApplicationExit() {
// Test applications that exit normally
int exitCode = config.getExitCode();
assertEquals(0, exitCode);
}@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(LoggingService.class))
.setRun(true);
@Test
public void testConsoleOutput() {
String output = config.getStartupConsoleOutput();
assertTrue(output.contains("Application started successfully"));
}@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(MyService.class))
.addCustomResourceEntry(
Paths.get("target/custom-config"),
"META-INF/custom-config.yaml"
);@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(MyService.class))
.withConfigurationResource("prod-test-application.properties")
.overrideConfigKey("quarkus.http.port", "8081")
.setCommandLineParameters(new String[]{"--config", "custom.properties"});@RegisterExtension
static final QuarkusProdModeTest config = new QuarkusProdModeTest()
.withApplicationRoot(jar -> jar.addClasses(MyService.class))
.setForcedDependencies(List.of(
Dependency.of("org.example", "test-extension", "1.0.0")
));Install with Tessl CLI
npx tessl i tessl/maven-io-quarkus--quarkus-junit5-internal