or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/maven-org-junit-jupiter--junit-jupiter-engine

JUnit Jupiter Engine provides the TestEngine implementation for discovering and executing Jupiter-based tests on the JUnit Platform.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.junit.jupiter/junit-jupiter-engine@5.13.x

To install, run

npx @tessl/cli install tessl/maven-org-junit-jupiter--junit-jupiter-engine@5.13.0

index.mddocs/

JUnit Jupiter Engine

JUnit Jupiter Engine provides the TestEngine implementation for discovering and executing Jupiter-based tests on the JUnit Platform. It serves as the execution engine that runs modern Java unit tests written using the JUnit Jupiter programming model, supporting advanced features like parameterized tests, dynamic tests, nested test classes, and a comprehensive extension system.

Package Information

  • Package Name: junit-jupiter-engine
  • Package Type: Maven
  • Language: Java
  • Group ID: org.junit.jupiter
  • Artifact ID: junit-jupiter-engine
  • Installation: Add to Maven dependencies:
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.13.4</version>
    <scope>test</scope>
</dependency>

For Gradle:

testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.13.4'

Core Imports

import org.junit.jupiter.engine.Constants;

Basic Usage

The JUnit Jupiter Engine operates as a service provider automatically discovered by the JUnit Platform. Users typically interact with it through configuration rather than direct API usage:

import org.junit.jupiter.engine.Constants;
import org.junit.platform.engine.ConfigurationParameters;

// Configure parallel execution
System.setProperty(Constants.PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME, "true");

// Configure timeout settings
System.setProperty(Constants.DEFAULT_TEST_METHOD_TIMEOUT_PROPERTY_NAME, "5s");

// Configure extension auto-detection
System.setProperty(Constants.EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME, "true");

Architecture

The JUnit Jupiter Engine follows a service provider pattern where:

  • TestEngine Service: The engine implements org.junit.platform.engine.TestEngine and is automatically discovered by the JUnit Platform
  • Internal Implementation: All implementation classes are marked as internal API and should not be used directly
  • Configuration-Based Usage: Users configure the engine through system properties and configuration parameters
  • Platform Integration: The engine integrates with IDEs, build tools, and continuous integration systems through the JUnit Platform

Capabilities

Configuration Constants

The engine provides configuration property name constants for customizing test execution behavior. All constants are public static final String fields used as keys for system properties or configuration parameters.

public final class Constants {
    // Extension Configuration
    public static final String EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME = "junit.jupiter.extensions.autodetection.enabled";
    public static final String EXTENSIONS_AUTODETECTION_INCLUDE_PROPERTY_NAME = "junit.jupiter.extensions.autodetection.include";
    public static final String EXTENSIONS_AUTODETECTION_EXCLUDE_PROPERTY_NAME = "junit.jupiter.extensions.autodetection.exclude";
    
    @API(status = MAINTAINED, since = "5.13.3")
    public static final String EXTENSIONS_TIMEOUT_THREAD_DUMP_ENABLED_PROPERTY_NAME = "junit.jupiter.extensions.timeout.thread.dump.enabled";

    // Condition Configuration
    public static final String DEACTIVATE_CONDITIONS_PATTERN_PROPERTY_NAME = "junit.jupiter.conditions.deactivate";
    public static final String DEACTIVATE_ALL_CONDITIONS_PATTERN = "*";

    // Display Name Configuration
    public static final String DEFAULT_DISPLAY_NAME_GENERATOR_PROPERTY_NAME = "junit.jupiter.displayname.generator.default";

    // Test Instance Lifecycle
    public static final String DEFAULT_TEST_INSTANCE_LIFECYCLE_PROPERTY_NAME = "junit.jupiter.testinstance.lifecycle.default";

    // Parallel Execution
    @API(status = STABLE, since = "5.10")
    public static final String PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME = "junit.jupiter.execution.parallel.enabled";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_PARALLEL_EXECUTION_MODE = "junit.jupiter.execution.parallel.mode.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_CLASSES_EXECUTION_MODE_PROPERTY_NAME = "junit.jupiter.execution.parallel.mode.classes.default";

    // Parallel Configuration Strategy
    @API(status = STABLE, since = "5.10")
    public static final String PARALLEL_CONFIG_STRATEGY_PROPERTY_NAME = "junit.jupiter.execution.parallel.config.strategy";
    @API(status = STABLE, since = "5.10")
    public static final String PARALLEL_CONFIG_FIXED_PARALLELISM_PROPERTY_NAME = "junit.jupiter.execution.parallel.config.fixed.parallelism";
    @API(status = MAINTAINED, since = "5.13.3")
    public static final String PARALLEL_CONFIG_FIXED_MAX_POOL_SIZE_PROPERTY_NAME = "junit.jupiter.execution.parallel.config.fixed.max-pool-size";
    @API(status = MAINTAINED, since = "5.13.3")
    public static final String PARALLEL_CONFIG_FIXED_SATURATE_PROPERTY_NAME = "junit.jupiter.execution.parallel.config.fixed.saturate";
    @API(status = STABLE, since = "5.10")
    public static final String PARALLEL_CONFIG_DYNAMIC_FACTOR_PROPERTY_NAME = "junit.jupiter.execution.parallel.config.dynamic.factor";
    @API(status = STABLE, since = "5.10")
    public static final String PARALLEL_CONFIG_CUSTOM_CLASS_PROPERTY_NAME = "junit.jupiter.execution.parallel.config.custom.class";

    // Timeout Configuration
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_TESTABLE_METHOD_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.testable.method.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_TEST_METHOD_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.test.method.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_TEST_TEMPLATE_METHOD_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.testtemplate.method.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_TEST_FACTORY_METHOD_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.testfactory.method.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_LIFECYCLE_METHOD_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.lifecycle.method.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_BEFORE_ALL_METHOD_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.beforeall.method.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_BEFORE_EACH_METHOD_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.beforeeach.method.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_AFTER_EACH_METHOD_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.aftereach.method.default";
    @API(status = STABLE, since = "5.10")
    public static final String DEFAULT_AFTER_ALL_METHOD_TIMEOUT_PROPERTY_NAME = "junit.jupiter.execution.timeout.afterall.method.default";
    @API(status = STABLE, since = "5.10")
    public static final String TIMEOUT_MODE_PROPERTY_NAME = "junit.jupiter.execution.timeout.mode";
    @API(status = MAINTAINED, since = "5.13.3")
    public static final String DEFAULT_TIMEOUT_THREAD_MODE_PROPERTY_NAME = "junit.jupiter.execution.timeout.thread.mode.default";

    // Test Ordering
    @API(status = STABLE, since = "5.9")
    public static final String DEFAULT_TEST_METHOD_ORDER_PROPERTY_NAME = "junit.jupiter.testmethod.order.default";
    @API(status = STABLE, since = "5.9")
    public static final String DEFAULT_TEST_CLASS_ORDER_PROPERTY_NAME = "junit.jupiter.testclass.order.default";

    // Temporary Directory Configuration
    @API(status = MAINTAINED, since = "5.13.3")
    public static final String DEFAULT_TEMP_DIR_FACTORY_PROPERTY_NAME = "junit.jupiter.tempdir.factory.default";
    @Deprecated
    @API(status = DEPRECATED, since = "5.8")
    public static final String TEMP_DIR_SCOPE_PROPERTY_NAME = "junit.jupiter.tempdir.scope";

    // AutoCloseable Configuration
    @API(status = MAINTAINED, since = "5.13.3")
    public static final String CLOSING_STORED_AUTO_CLOSEABLE_ENABLED_PROPERTY_NAME = "junit.jupiter.closing.autoclose.enabled";

    // Extension Context Configuration
    @API(status = MAINTAINED, since = "5.13.3")
    public static final String DEFAULT_TEST_CLASS_INSTANCE_CONSTRUCTION_EXTENSION_CONTEXT_SCOPE_PROPERTY_NAME = "junit.jupiter.testclass.instance.construction.extensioncontext.scope.default";
}

Usage Examples:

Configure parallel execution:

// Enable parallel execution
System.setProperty(Constants.PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME, "true");

// Set dynamic parallel strategy with custom factor
System.setProperty(Constants.PARALLEL_CONFIG_STRATEGY_PROPERTY_NAME, "dynamic");
System.setProperty(Constants.PARALLEL_CONFIG_DYNAMIC_FACTOR_PROPERTY_NAME, "2.0");

Configure timeouts:

// Set default timeout for all test methods
System.setProperty(Constants.DEFAULT_TEST_METHOD_TIMEOUT_PROPERTY_NAME, "30s");

// Set timeout for lifecycle methods
System.setProperty(Constants.DEFAULT_BEFORE_EACH_METHOD_TIMEOUT_PROPERTY_NAME, "10s");

Configure extensions:

// Enable auto-detection of extensions
System.setProperty(Constants.EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME, "true");

// Include specific extension patterns
System.setProperty(Constants.EXTENSIONS_AUTODETECTION_INCLUDE_PROPERTY_NAME, "org.example.*");

// Enable thread dump on timeout
System.setProperty(Constants.EXTENSIONS_TIMEOUT_THREAD_DUMP_ENABLED_PROPERTY_NAME, "true");

Important Notes

Internal Implementation

  • The actual JupiterTestEngine class is marked as @API(status = INTERNAL) and should not be used directly
  • All descriptor, execution, configuration, and extension classes are internal implementation details
  • The engine is designed to be used through the JUnit Platform service discovery mechanism

Service Provider Pattern

  • The engine provides org.junit.platform.engine.TestEngine service
  • Automatically discovered by the JUnit Platform at runtime
  • No direct instantiation or method calls required

Configuration

  • All configuration is done through system properties or JUnit Platform configuration parameters
  • Property names are provided as constants in the Constants class
  • Changes to configuration properties affect the engine's behavior globally