A runner for unit tests, intended for testing Quarkus rather than for end user consumption.
—
The QuarkusUnitTest class is the main JUnit 5 extension for testing Quarkus internals and extensions. It provides comprehensive support for build customization, dependency management, configuration override, and lifecycle management.
public class QuarkusUnitTest implements BeforeAllCallback, AfterAllCallback,
BeforeEachCallback, AfterEachCallback, ParameterResolver, InvocationInterceptor {
public QuarkusUnitTest();
public static QuarkusUnitTest withSecuredConnection();
}Configure the application archive for testing:
public Supplier<JavaArchive> getArchiveProducer();
public QuarkusUnitTest setArchiveProducer(Supplier<JavaArchive> archiveProducer);
public QuarkusUnitTest withApplicationRoot(Consumer<JavaArchive> applicationRootConsumer);
public QuarkusUnitTest withEmptyApplication();Configure expected exceptions and assertion handling:
public QuarkusUnitTest setExpectedException(Class<? extends Throwable> expectedException);
public QuarkusUnitTest setExpectedException(Class<? extends Throwable> expectedException, boolean logMessage);
public QuarkusUnitTest assertException(Consumer<Throwable> assertException);Add and manage additional dependencies:
public QuarkusUnitTest addAdditionalDependency(JavaArchive archive);
public QuarkusUnitTest withAdditionalDependency(Consumer<JavaArchive> dependencyConsumer);
public QuarkusUnitTest setForcedDependencies(List<Dependency> forcedDependencies);Customize the build process and add listeners:
public QuarkusUnitTest addBuildChainCustomizer(Consumer<BuildChainBuilder> customizer);
public QuarkusUnitTest addClassLoaderEventListener(ClassLoaderEventListener listener);
public QuarkusUnitTest addBootstrapCustomizer(Consumer<QuarkusBootstrap.Builder> consumer);Override configuration keys and provide configuration resources:
public QuarkusUnitTest withConfigurationResource(String resourceName);
public QuarkusUnitTest overrideConfigKey(String key, String value);
public QuarkusUnitTest overrideRuntimeConfigKey(String key, String value);Configure logging behavior and record handling:
public QuarkusUnitTest setLogFileName(String logFileName);
public QuarkusUnitTest setLogRecordPredicate(Predicate<LogRecord> predicate);
public QuarkusUnitTest assertLogRecords(Consumer<List<LogRecord>> asserter);Handle command line arguments:
public String[] getCommandLineParameters();
public QuarkusUnitTest setCommandLineParameters(String... commandLineParameters);Enable debugging and tracing capabilities:
public QuarkusUnitTest debugBytecode(boolean debugBytecode);
public QuarkusUnitTest traceCategories(String... categories);Customize before/after behavior:
public QuarkusUnitTest setBeforeAllCustomizer(Runnable beforeAllCustomizer);
public QuarkusUnitTest setAfterAllCustomizer(Runnable afterAllCustomizer);
public Runnable getAfterUndeployListener();
public QuarkusUnitTest setAfterUndeployListener(Runnable afterUndeployListener);Configure test execution behavior:
public QuarkusUnitTest setAllowTestClassOutsideDeployment(boolean allowTestClassOutsideDeployment);
public QuarkusUnitTest setFlatClassPath(boolean flatClassPath);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 BasicUnitTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(MyService.class, MyConfiguration.class));
@Test
public void testBasicFunctionality() {
// Test implementation
}
}@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.withApplicationRoot(jar -> jar.addClasses(MyService.class))
.overrideConfigKey("my.property", "test-value")
.withConfigurationResource("test-application.properties");@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.withApplicationRoot(jar -> jar.addClasses(FailingService.class))
.setExpectedException(RuntimeException.class)
.assertException(t -> {
assertTrue(t.getMessage().contains("Expected failure"));
});@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.withApplicationRoot(jar -> jar.addClasses(MyService.class))
.addAdditionalDependency(ShrinkWrap.create(JavaArchive.class)
.addClasses(AdditionalTestClass.class));@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.withApplicationRoot(jar -> jar.addClasses(MyService.class))
.addBuildChainCustomizer(builder -> {
// Custom build chain logic
builder.addBuildStep(new MyBuildStep());
});@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.withApplicationRoot(jar -> jar.addClasses(LoggingService.class))
.assertLogRecords(logRecords -> {
assertTrue(logRecords.stream()
.anyMatch(record -> record.getMessage().contains("Expected log message")));
});public static final String THE_BUILD_WAS_EXPECTED_TO_FAIL = "The build was expected to fail";This constant is used internally for build failure messaging and can be referenced in test assertions.
Install with Tessl CLI
npx tessl i tessl/maven-io-quarkus--quarkus-junit5-internal