CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-io-quarkus--quarkus-junit5-internal

A runner for unit tests, intended for testing Quarkus rather than for end user consumption.

Pending
Overview
Eval results
Files

unit-testing.mddocs/

Unit Testing

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.

Core API

Basic Setup

public class QuarkusUnitTest implements BeforeAllCallback, AfterAllCallback, 
    BeforeEachCallback, AfterEachCallback, ParameterResolver, InvocationInterceptor {
    
    public QuarkusUnitTest();
    public static QuarkusUnitTest withSecuredConnection();
}

Archive Configuration

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();

Exception Handling

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);

Dependencies Management

Add and manage additional dependencies:

public QuarkusUnitTest addAdditionalDependency(JavaArchive archive);
public QuarkusUnitTest withAdditionalDependency(Consumer<JavaArchive> dependencyConsumer);
public QuarkusUnitTest setForcedDependencies(List<Dependency> forcedDependencies);

Build Customization

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);

Configuration Management

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);

Logging Configuration

Configure logging behavior and record handling:

public QuarkusUnitTest setLogFileName(String logFileName);
public QuarkusUnitTest setLogRecordPredicate(Predicate<LogRecord> predicate);
public QuarkusUnitTest assertLogRecords(Consumer<List<LogRecord>> asserter);

Command Line Parameters

Handle command line arguments:

public String[] getCommandLineParameters();
public QuarkusUnitTest setCommandLineParameters(String... commandLineParameters);

Debug Features

Enable debugging and tracing capabilities:

public QuarkusUnitTest debugBytecode(boolean debugBytecode);
public QuarkusUnitTest traceCategories(String... categories);

Lifecycle Customization

Customize before/after behavior:

public QuarkusUnitTest setBeforeAllCustomizer(Runnable beforeAllCustomizer);
public QuarkusUnitTest setAfterAllCustomizer(Runnable afterAllCustomizer);
public Runnable getAfterUndeployListener();
public QuarkusUnitTest setAfterUndeployListener(Runnable afterUndeployListener);

Test Behavior Configuration

Configure test execution behavior:

public QuarkusUnitTest setAllowTestClassOutsideDeployment(boolean allowTestClassOutsideDeployment);
public QuarkusUnitTest setFlatClassPath(boolean flatClassPath);

Usage Examples

Basic Test Setup

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
    }
}

Test with Configuration Override

@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
    .withApplicationRoot(jar -> jar.addClasses(MyService.class))
    .overrideConfigKey("my.property", "test-value")
    .withConfigurationResource("test-application.properties");

Test with Exception Handling

@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
    .withApplicationRoot(jar -> jar.addClasses(FailingService.class))
    .setExpectedException(RuntimeException.class)
    .assertException(t -> {
        assertTrue(t.getMessage().contains("Expected failure"));
    });

Test with Additional Dependencies

@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
    .withApplicationRoot(jar -> jar.addClasses(MyService.class))
    .addAdditionalDependency(ShrinkWrap.create(JavaArchive.class)
        .addClasses(AdditionalTestClass.class));

Test with Build Chain Customization

@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
    .withApplicationRoot(jar -> jar.addClasses(MyService.class))
    .addBuildChainCustomizer(builder -> {
        // Custom build chain logic
        builder.addBuildStep(new MyBuildStep());
    });

Test with Logging Assertions

@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")));
    });

Constants

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

docs

build-chain-customization.md

dev-mode-testing.md

index.md

logging-test-resources.md

prod-mode-testing.md

results-utilities.md

unit-testing.md

tile.json