JUnit Jupiter Engine provides the TestEngine implementation for discovering and executing Jupiter-based tests on the JUnit Platform.
npx @tessl/cli install tessl/maven-org-junit-jupiter--junit-jupiter-engine@5.13.0JUnit 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.
<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'import org.junit.jupiter.engine.Constants;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");The JUnit Jupiter Engine follows a service provider pattern where:
org.junit.platform.engine.TestEngine and is automatically discovered by the JUnit PlatformThe 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");JupiterTestEngine class is marked as @API(status = INTERNAL) and should not be used directlyorg.junit.platform.engine.TestEngine serviceConstants class