or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

build-chain-customization.mddev-mode-testing.mdindex.mdlogging-test-resources.mdprod-mode-testing.mdresults-utilities.mdunit-testing.md
tile.json

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

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

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/io.quarkus/quarkus-junit5-internal@3.23.x

To install, run

npx @tessl/cli install tessl/maven-io-quarkus--quarkus-junit5-internal@3.23.0

index.mddocs/

Quarkus JUnit 5 Internal

An 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.

Package Information

  • Package Name: quarkus-junit5-internal
  • Group ID: io.quarkus
  • Artifact ID: quarkus-junit5-internal
  • Language: Java
  • Package Manager: Maven
  • Installation:
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-junit5-internal</artifactId>
        <version>3.23.0</version>
    </dependency>

Core Imports

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;

Basic Usage

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

Architecture

The Quarkus JUnit 5 Internal framework is built around several key components:

  • Test Extensions: Three main JUnit 5 extensions (QuarkusUnitTest, QuarkusDevModeTest, QuarkusProdModeTest) that handle different testing scenarios
  • Build Chain Integration: Support for customizing Quarkus build chains during testing via build steps and customizers
  • Logging Infrastructure: Comprehensive logging capture and analysis tools for test verification
  • Result Management: Containers and utilities for managing test execution results and build artifacts
  • Lifecycle Management: Test resource management and cleanup utilities

Capabilities

Unit Testing

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

Unit Testing

Development Mode Testing

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

Development Mode Testing

Production Mode Testing

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

Production Mode Testing

Logging and Test Resources

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

Logging and Test Resources

Build Chain Customization

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

Build Chain Customization

Result Containers and Utilities

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

Annotations

@LogFile

Marker annotation for injecting log file paths into test fields.

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogFile {
}

@ProdBuildResults

Marker annotation for injecting production build results into test fields.

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ProdBuildResults {
}

Types

Build Chain Types

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

Continuous Testing Types

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