This document contains the change log for all JUnit 5 releases since 5.7 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: ❓
For a complete list of all closed issues and pull requests for this release, consult the 5.8 M1 milestone page in the JUnit repository on GitHub.
ClasspathScannernow returns a valid list of class names when the package name is equal to the name of a module on the module path.
For consistency with the rest of the JUnit Platform, the experimental
LauncherDiscoveryListeneris now an interface instead of an abstract class.
nestedContainer(Class<?>, Condition<Event>)methods in
EventConditionsthat allow you to provide conditions for matching against test and nested container events when using the
EngineTestKit. For example,
test(displayName("my test"))can be used to match against a test whose display name is
junit-platform-jfrmodule now also reports execution events for containers, e.g. test classes.
junit-platform-jfrmodule now also reports test discovery events for the launcher and registered test engines.
LauncherDiscoveryListenerimplementations can now be registered via Java’s
Documented constant value of
UniqueIdnow retain less memory because they no longer store
Stringrepresentations of unique IDs.
ExclusiveResourcehandling, if a
Nodehas only read locks and no read-write locks, then descendants are not forced into
SAME_THREADexecution, and can run concurrently.
Tools that make multiple calls to the
LauncherAPI should now create a
LauncherSessioninstead in order to allow for executing global setup and teardown code exactly once via the new
LauncherSessionListenerinterface that can be registered via Java’s
InvocationInterceptor.interceptDynamicTest(Invocation<Void> , ExtensionContext)has been deprecated in favor of
InvocationInterceptor.interceptDynamicTest(Invocation<Void> , DynamicTestInvocationContext, ExtensionContext)that allows to access the dynamic test executable via
Numeric literals used with
CsvFileSourcecan now be expressed using underscores as in some JVM languages, to improve readability of long numbers like
Documented constant values in
assertInstanceOfmethods as a replacement for
assertTrue(obj instanceof X)which provide better error messages comparable to those of
Dynamic tests now require less memory thanks to a number of improvements to internal data structures.
Allow rows in
@CsvSourceto start with a number sign (#)
ignoreLeadingAndTrailingWhitespaceattribute to control whether or not to trim whitespaces in
Date of Release: ❓
Scope: Bug fixes since 5.7.0
For a complete list of all closed issues and pull requests for this release, consult the 5.7.1 milestone page in the JUnit repository on GitHub.
For compatibility with
JarInputStream, all JARs now contain
META-INF/MANIFEST.MFas their first entries again.
"null"if the invocation of
toString()on the supplied object returns
null. Although this is an internal utility, the effect of this change may be witnessed by end users and test engine or extension authors.
toString()implementation of an argument passed to a
null, the display name formatter for the parameterized test now treats the name of the corresponding argument as
"null"instead of throwing an exception. This fixes a regression introduced in JUnit Jupiter 5.7.0.
Creator functions passed to
ExtensionContext.Store.getOrComputeIfAbsent()are now only called once even if they throw an exception.
The user guide now explains Nested Tests in more detail.
New utility method in
TestInstancePreDestroyCallbackhelps to ensure all test instances are processed when used in conjunction with
JAVA_17has been added to the
JREenum for use with JRE-based execution conditions.
Date of Release: September 13, 2020
Promotion of experimental features in JUnit Platform and Jupiter
Java Flight Recorder support
Configurable default method orderer
Custom disabled reasons for all
For complete details consult the 5.7.0 Release Notes online.