Release Notes
This document contains the change log for all JUnit releases since 5.14 GA.
6.0.3
Date of Release: February 15, 2026
Scope: Bug fixes and enhancements since 6.0.2
For a complete list of all closed issues and pull requests for this release, consult the 6.0.3 milestone page in the JUnit repository on GitHub.
6.0.2
Date of Release: January 6, 2026
Scope: Bug fixes and enhancements since 6.0.1
For a complete list of all closed issues and pull requests for this release, consult the 6.0.2 milestone page in the JUnit repository on GitHub.
6.0.1
Date of Release: October 31, 2025
Scope: Bug fixes and enhancements since 6.0.0
For a complete list of all closed issues and pull requests for this release, consult the 6.0.1 milestone page in the JUnit repository on GitHub.
JUnit Platform
JUnit Jupiter
Bug Fixes
-
A regression introduced in version 6.0.0 caused an exception when using
@CsvSourceor@CsvFileSourceif thedelimiterordelimiterStringattribute was set to#. This occurred because#was used as the default comment character without an option to change it. To resolve this, a newcommentCharacterattribute has been added to both annotations. Its default value remains#, but it can now be customized to avoid conflicts with other control characters. -
Fix
IllegalAccessErrorthrown when using the Kotlin-specificassertDoesNotThrowassertion. -
Stop reporting discovery issues for synthetic methods, particularly in conjunction with Kotlin suspend functions.
-
Fix support for test methods with the same signature as package-private methods declared in super classes in different packages.
Deprecations and Breaking Changes
-
The
org.junit.jupiter.migrationsupportmodule descriptor has been marked as deprecated for removal.
New Features and Improvements
-
The
@CsvSourceand@CsvFileSourceannotations now allow specifying a custom comment character using the newcommentCharacterattribute. -
Improve error message when
@ParameterizedClassis used with field injection without providing enough arguments. -
Allow calling the
TypedArgumentConverterconstructor for@Nullable Ttarget types without having to cast class literals toClass<@Nullable T>.
6.0.0
Date of Release: September 30, 2025
Scope:
-
Java 17 and Kotlin 2.1 baseline
-
Single version number for Platform, Jupiter, and Vintage
-
Use of JSpecify annotations to express nullability
-
Integration of JFR functionality in
junit-platform-launcher -
Removal of
junit-platform-runnerandjunit-platform-jfr -
Deterministic order of
@Nestedclasses -
MethodOrderer.DefaultandClassOrderer.Defaultfor@Nestedclasses -
Inheritance of
@TestMethodOrderby enclosed@Nestedclasses -
Switch to FastCSV library for
@CsvSourceand@CsvFileSource -
Support for using Kotlin
suspendfunctions as test methods -
New
--fail-fastmode for ConsoleLauncher -
Support for cancelling test execution via
CancellationToken -
Removal of various deprecated behaviors and APIs
For a complete list of all closed issues and pull requests for this release, consult the 6.0.0-M1, 6.0.0-M2, 6.0.0-RC1, 6.0.0-RC2, 6.0.0-RC3, and 6.0.0 milestone pages in the JUnit repository on GitHub.
|
Migration Guide
Please refer to the wiki for guidance on upgrading from JUnit 5.x.y to 6.0.0. |
Overall Improvements
Deprecations and Breaking Changes
-
Minimum required Java version is now 17.
-
Minimum required Kotlin version is now 2.2.
-
Platform artifacts now use the same version number as Jupiter and Vintage artifacts.
New Features and Improvements
-
All JUnit modules now use JSpecify nullability annotations to indicate which method parameters, return types, etc. can be
null.
JUnit Platform
Deprecations and Breaking Changes
-
Support for running the
ConsoleLauncherwithout specifying a subcommand has been removed. -
Support for non-conventional
ConsoleLauncheroptions such as--h(rather than-h) or-help(rather than--help) has been removed. -
The
junit-platform-runnermodule which provided the JUnit 4 basedJUnitPlatformrunner has been removed. -
The
junit-platform-jfrmodule which provided custom Java Flight Recorder (JFR) events for test discovery and execution has been removed. The functionality is now available directly in thejunit-platform-launchermodule. -
Support for Maven Surefire/Failsafe versions less than 3.0.0 has been removed.
-
The following deprecated APIs have been removed:
-
ReflectionSupport.loadClass(String)method -
ReflectionUtils.readFieldValue(…)methods -
ReflectionUtils.getMethod(…)method -
BlacklistedExceptionsclass -
PreconditionViolationExceptionclass (fromorg.junit.platform.commons.util) -
ClasspathScanningSupportclass -
ConfigurationParameters.size()method -
MethodSelector.getMethodParameterTypes()method -
NestedMethodSelector.getMethodParameterTypes()method -
ReportEntry()constructor -
SingleTestExecutorclass -
LauncherDiscoveryRequestBuilder()constructor -
LegacyReportingUtilsclass -
TestPlan.add(TestIdentifier),TestPlan.getChildren(String), andTestPlan.getTestIdentifier(String)methods -
@UseTechnicalNamesannotation for suites -
EngineTestKit.execute(String, EngineDiscoveryRequest),EngineTestKit.execute(TestEngine, EngineDiscoveryRequest), andEngineTestKit.Builder.filters(DiscoveryFilter…)methods
-
-
Support for "legacy semantics" for field and method searches that used to be configurable via the
junit.platform.reflection.search.useLegacySemanticssystem property has been removed. JUnit now always adheres to standard Java semantics regarding whether a given field or method is visible or overridden according to the rules of the Java language. -
The type bounds of the following methods have been changed to be more flexible and allow nullable and non-nullable types:
-
ConfigurationParameters.get(String, Function) -
NamespacedHierarchicalStore.getOrComputeIfAbsent(N, K, Function) -
NamespacedHierarchicalStore.getOrComputeIfAbsent(N, K, Function, Class)
-
-
The
junit-platform-suite-commonsmodule has been removed. Its functionality is now integrated directly in thejunit-platform-suitemodule. -
ConversionSupportnow convertsStringtoLocaleusing the IETF BCP 47 language tag format supported by theLocale.forLanguageTag(String)factory method instead of the format used by the deprecatedLocale(String)constructor. -
All
getOrComputeIfAbsent(…)methods inNamespacedHierarchicalStorehave been deprecated in favor of the newcomputeIfAbsent(…)methods.