This document contains the change log for all JUnit 5 releases since 5.3 GA.
Please refer to the User Guide for comprehensive reference documentation for programmers writing tests, extension authors, and engine authors as well as build tool and IDE vendors.
Date of Release: December 23, 2018
Scope: XML report generating listener, Test Kit for testing engines and extensions, new
junit-jupiter dependency aggregating artifact for simplified dependency management in
TempDirectory extension, display name generator API, test execution order
API, API for accessing outer test instances, JUnit 4
@Ignore migration support, improved
diagnostics and error reporting, discontinuation of the
as well as various minor improvements and bug fixes.
For a complete list of all closed issues and pull requests for this release, consult the 5.4.0-M1 milestone page in the JUnit repository on GitHub.
junit-platform-suite-apiartifact no longer has an unnecessary direct dependency on
Containers and tests that interrupt the current thread no longer cause surprising failures in subsequent tests that interact with the reused thread.
This applies specifically to containers and tests executed via a
HierarchicalTestExecutorService— for example, a
@Testmethod in JUnit Jupiter — that interrupt the current thread — for example, via
Thread.currentThread().interrupt()— but fail to clear the interrupted status flag for the current thread.
TestTaskimplementation used internally by
HierarchicalTestExecutorServiceimplementations now automatically clears the interrupted status for the current thread after the execution of each container and test and logs a message at
FINEin java.util.logging) if the interrupted status is not cleared properly by user code.
The JUnit Platform Maven Surefire Provider (
junit-platform-surefire-provider) has been discontinued and is no longer released as part of JUnit 5. Please use Maven Surefire’s native support for running tests on the JUnit Platform instead (requires Maven Surefire 2.22.0 or higher).
junit-platform-reportingartifact containing a
LegacyXmlReportGeneratingListenerthat generates XML reports using a format which is compatible with the de facto standard for JUnit 4 based test reports that was made popular by the Ant build system.
See JUnit Platform Reporting in the User Guide for details.
junit-platform-testkitartifact containing a Test Kit API for testing the execution of a
TestEnginerunning on the JUnit Platform.
See JUnit Platform Test Kit in the User Guide for details.
ModifierSupportclass providing an API for extension and test engine authors to inspect modifiers of classes and members.
Exceptions reported due to failed reflective operations such as loading a class, reading a field’s value, or looking up a method by name now include the original exception as their cause to make it easier to debug underlying issues.
HierarchicalTestEnginemay now add behavior that wraps around the invocation of
Node.after()using the new
@ResourceLockcan now be declared on test template methods such as
@ResourceLockis used, the invocations will run in the same thread, even if parallel execution is enabled.
The default mode for parallel test execution has been changed from
SAME_THREADto allow for gradual opt-in by using the
@Executionannotation on individual test classes or methods. You can invert this behavior by changing the default execution mode via the new
junit.jupiter.execution.parallel.mode.defaultconfiguration parameter. Please refer to the User Guide for details.
org.junit.jupiter:junit-jupiterartifact that simplifies dependency management for JUnit Jupiter in build tools such as Gradle and Maven.
Specifically, this artifact aggregates all dependencies that are required to use JUnit Jupiter along with optional dependencies that extend the core Jupiter APIs.
It contains compile-time dependencies on
junit-jupiter-paramsand a runtime dependency on
Assertions.assertEquals()variants that compare floating point numbers using a delta now support a delta of zero.
Assertions.assertEquals()variants that accept mixed boxed and unboxed primitive values, allowing statements such as
assertEquals(42, Integer.valueOf("42"))to compile.
Assertions.assertNotEquals()variants that accept the following primitive data types:
double. Mixed boxed and unboxed primitive values are also supported.
Exceptions thrown in
Assertions.assertAll()are now additionally tracked as suppressed exceptions in the resulting
MultipleFailuresError. Consequently, the stack traces for such exceptions are now visible as Suppressed at the end of the stack trace for the invocation of
AssumptionViolatedExceptionis now supported in JUnit Jupiter for aborting a test mid-flight due to a failed assumption — for example, via JUnit 4’s
TempDirectoryextension (formerly part of JUnit Pioneer) that allows one to write test that require a temporary directory in a
JRE.JAVA_12enum constant for use with
In addition to returning streams,
@TestFactory-annotated methods may now return a single
DynamicNode— for example, a
Implicit conversion from hexadecimal and octal string representations to integral types in
@ParameterizedTestarguments — for example, conversion from
org.junit.jupiter.api.parallel.Resourcesfor use with
@ResourceLockto synchronize test execution regarding the default
MethodOrdererAPI for ordering the sequence of tests with built-in support for alphanumeric,
@Orderannotation based, and random ordering of test methods.
See Test Execution Order in the User Guide for details.
@DisplayNameGenerationannotation that allow declarative configuration of a pre-defined or custom display name generator.
See Display Name Generators in the User Guide for details.
@Ignoreannotation is now supported for disabling test classes and test methods via the
ExtensionContextmethods to access all test instances, including enclosing ones for
Date of Release: November 25, 2018
Scope: Bug fixes since 5.3.1
For a complete list of all closed issues and pull requests for this release, consult the 5.3.2 milestone page in the JUnit repository on GitHub.
Assertions.assertAll()is now thread-safe — for example, it can now be used with a parallel
OS.SOLARISenum constant used with
@DisabledOnOsis now also detected as the current operating system if the
os.nameJVM system property contains
Assertions.assertLinesMatch()no longer throws a
NullPointerExceptionafter evaluating a fast-forward match if there are more expected lines after the fast-forward match than remain in the actual results. This bug only manifested itself if the expected list size was equal to or greater than the actual list size.
Multidimensional arrays may now be supplied to
@ParameterizedTestmethods from factory methods configured via
For example, a factory method with the signature
static Stream<int> factory()can be used as the
@ParameterizedTestwith the signature
Threads created for running tests in parallel now use the same thread context class loader (TCCL) that was set when creating the underlying executor service. This resolves
ClassNotFoundExceptionissues that only occur in parallel execution mode when a custom TCCL is in place.
When executing tests in parallel, lifecycle methods and callbacks called after a
@TestFactorymethod are now always executed after the dynamic tests returned by the method.
Exceptions thrown during initialization of static
@RegisterExtensionfields now cause the test class to fail instead of being silently swallowed.
Date of Release: September 11, 2018
Scope: Bug fixes since 5.3.0
For a complete list of all closed issues and pull requests for this release, consult the 5.3.1 milestone page in the JUnit repository on GitHub.
OutOfMemoryErrorregression introduced in JUnit 5.3.0 has been fixed.
NodeTestTaskused by implementations of
HierarchicalTestEngine(such as the Jupiter and Vintage test engines) no longer retains references to contextual state after a node has completed execution. This allows state such as instances of test classes to be properly garbage collected by the JVM.
NodeTestTaskinstance was created for each
TestDescriptorbefore starting execution. Now they are created on the fly and can be garbage collected by the JVM after the enclosing container has finished.
The OpenTest4J dependency has been updated to 1.1.1 to fix a serialization incompatibility between 1.0.0 and 1.1.0 that caused failure messages to be discarded when used from Gradle and potentially other tools and IDEs.
assertThrows()that are passed a method reference for an overloaded method with a
voidreturn type once again compile.
For example, given an instance of
java.lang.Objectstored in a variable named
assertThrows(Exception.class, object::wait)compiled against JUnit 5.2.0, failed to compile against JUnit 5.3.0, but now compiles against JUnit 5.3.1.
Date of Release: September 3, 2018
Scope: Parallel test execution, output capture for
TestInstanceFactory extension API, custom test sources for dynamic tests, promotion of
the dynamic test API from experimental to maintained status, discontinuation of the
junit-platform-gradle-plugin, deprecation of the
well as various minor improvements and bug fixes.
For complete details consult the 5.3.0 Release Notes online.