This document contains the change log for all JUnit 5 releases since 5.13 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.

5.14.0-RC1

Date of Release: September 23, 2025

Scope:

  • Bug fixes and enhancements since 5.13.x

  • Deprecations along with new APIs to ease migration to the upcoming 6.0 release

For a complete list of all closed issues and pull requests for this release, consult the 5.14.0-RC1 milestone page in the JUnit repository on GitHub.

JUnit Platform

Bug Fixes

  • The Launcher (specifically LauncherDiscoveryResult) now retains the original TestEngine registration order after pruning test engines without tests, thereby ensuring reliable test execution order of multiple test engines.

Deprecations and Breaking Changes

  • Deprecate OutputDirectoryProvider interface in favor of the new OutputDirectoryCreator interface to resolve cyclic package dependency along with the following APIs (which all have replacements working with OutputDirectoryCreator):

    • EngineDiscoveryRequest.getOutputDirectoryProvider()

    • ExecutionRequest.getOutputDirectoryProvider()

    • LauncherDiscoveryRequestBuilder.outputDirectoryProvider(OutputDirectoryProvider)

    • TestPlan.getOutputDirectoryProvider()

    • EngineTestKit.Builder.outputDirectoryProvider(OutputDirectoryProvider)

  • Deprecate org.junit.platform.commons.support.Resource interface in favor of the new org.junit.platform.commons.io.Resource one.

  • Deprecate Resource-related methods in ReflectionSupport in favor of corresponding methods in new ResourceSupport class:

    • findAllResourcesInClasspathRoot(URI, Predicate)

    • findAllResourcesInModule(String, Predicate)

    • findAllResourcesInPackage(String, Predicate)

    • streamAllResourcesInClasspathRoot(URI, Predicate)

    • streamAllResourcesInModule(String, Predicate)

    • streamAllResourcesInPackage(String, Predicate)

    • tryToGetResources(String)

    • tryToGetResources(String, ClassLoader)

  • Deprecate DiscoverySelectors.selectClasspathResource(Set) method in favor of selectClasspathResourceByName(Set).

  • Deprecate ClasspathResourceSelector.getClasspathResources() method in favor of getResources().

  • Deprecate EngineDiscoveryRequestResolver.Builder.addResourceContainerSelectorResolver(Predicate) method in favor of addResourceContainerSelectorResolver(ResourceFilter).

  • Deprecate Resource-related methods in ClasspathScanner in favor of new methods using org.junit.platform.commons.io.Resource and ResourceFilter:

    • scanForResourcesInPackage(String, Predicate)

    • scanForResourcesInClasspathRoot(URI, Predicate)

New Features and Improvements

  • Emit warning when @SuiteDisplayName is used with a blank string

  • To help diagnosing potentially invalid invocations, the Console Launcher now logs warnings for nonexistent classpath roots added via --classpath or --scan-classpath rather than silently ignoring them.

  • New classpath resource abstraction in org.junit.platform.commons.io.Resource with support for loading resources or finding them on the classpath via static utility methods in the new org.junit.platform.commons.support.ResourceSupport class.

  • New Resource.of(String, URI) static factory method for creating an org.junit.platform.commons.support.Resource.

  • New FileSource.withPosition(FilePosition) method to avoid the overhead of redundant canonicalization of files when using FileSource.from(File, FilePosition) with many different FilePosition instances for the same File.

  • New classpath resource abstraction in org.junit.platform.commons.io.Resource with support for loading resources or finding them on the classpath via static utility methods in the new org.junit.platform.commons.support.ResourceSupport class.

JUnit Jupiter

Deprecations and Breaking Changes

  • MediaType.APPLICATION_JSON_UTF_8 is now deprecated in favor of using MediaType.APPLICATION_JSON, since the industry considers UTF-8 to be the implicit default encoding for the application/json media type.

  • org.junit.jupiter.api.extension.MediaType is now deprecated in favor of the new org.junit.jupiter.api.MediaType.

  • The publishFile(…​) methods in TestReporter which accept an org.junit.jupiter.api.extension.MediaType are now deprecated in favor of new variants which accept an org.junit.jupiter.api.MediaType.

  • The publishFile(…​) method in ExtensionContext which accepts an org.junit.jupiter.api.extension.MediaType is now deprecated in favor of a new variant which accepts an org.junit.jupiter.api.MediaType.

  • org.junit.jupiter.params.support.ParameterInfo is now deprecated in favor of the new org.junit.jupiter.params.ParameterInfo.

New Features and Improvements

  • MediaType now trims leading and trailing whitespace from a supplied value, type, or subtype.

  • MediaType now eagerly rejects a blank value, type, or subtype.

JUnit Vintage

No changes.

5.13.4

Date of Release: July 21, 2025

Scope: Bug fixes and enhancements since 5.13.3

For a complete list of all closed issues and pull requests for this release, consult the 5.13.4 milestone page in the JUnit repository on GitHub.

Overall Changes

New Features and Improvements

  • Remove java.* packages from Import-Package headers in all jar manifests to maximize compatibility with older OSGi runtimes.

JUnit Platform

Bug Fixes

  • ClasspathResourceSelector no longer allows to be constructed with a resource name that is blank after removing the leading slash.

  • PackageSource.from(String) now allows to be constructed with an empty string to indicate the default package.

JUnit Jupiter

New Features and Improvements

  • Log only once per implementation type for CloseableResource implementations that do not implement AutoCloseable to avoid flooding console output with this warning.

JUnit Vintage

No changes.

5.13.3

Date of Release: July 4, 2025

Scope: Bug fixes and enhancements since 5.13.2

For a complete list of all closed issues and pull requests for this release, consult the 5.13.3 milestone page in the JUnit repository on GitHub.

Overall Changes

New Features and Improvements

  • All experimental APIs have been promoted to maintained to indicate that they won’t be removed in any future 5.x release.

JUnit Platform

No changes.

JUnit Jupiter

Bug Fixes

  • Fix regression that caused top-level and static member classes annotated with @Nested to no longer be executed because they caused a discovery issue to be reported.

  • Stop reporting discovery issues for composed annotation classes that are meta-annotated with @Nested.

  • Stop reporting discovery issues for DefaultImpls classes generated by the Kotlin compiler for interfaces with non-abstract test methods.

  • When a customReason is supplied along with a null value for the default reason to ConditionEvaluationResult.disabled(String, String), the resulting reason is now "my custom reason" instead of "null ==> my custom reason".

New Features and Improvements

  • A blank reason supplied to a ConditionEvaluationResult factory method is now treated the same as a null reason, resulting in an empty Optional returned from ConditionEvaluationResult.getReason().

  • The Javadoc for factory methods in ConditionEvaluationResult now explicitly states that both null and blank values are supported for reason strings and that such values will result in an empty Optional returned from ConditionEvaluationResult.getReason().

  • Improve message of discovery issues reported for ineffective @Order annotations.

JUnit Vintage

No changes.

5.13.2

Date of Release: June 24, 2025

Scope: Bug fixes and enhancements since 5.13.1

For a complete list of all closed issues and pull requests for this release, consult the 5.13.2 milestone page in the JUnit repository on GitHub.

JUnit Platform

Bug Fixes

  • If Git information is included in the Open Test Reporting XML format (see below), any credentials that may be configured as part the remote.origin.url setting in Git were previously written to the originUrl attribute of <git:repository> elements. For example, when cloning a GitHub repository using a URL like https://username:[email protected]/organization/repository.git, both username and password were included in the XML report. Since a report which includes this information may be shared, published, or archived (for example, on a CI server), this was reported as a potential security vulnerability (CVE-2025-53103). Any credentials are now replaced with *** before writing them to the XML report.

Deprecations and Breaking Changes

  • Including information about the Git repository (such as the commit hash and branch name) in the Open Test Reporting XML format is now an opt-in feature that can be enabled via a configuration parameter. Please refer to the User Guide for details.

JUnit Jupiter

Bug Fixes

  • Stop reporting discovery issues for cyclic inner class hierarchies not annotated with @Nested.

  • Stop reporting discovery issues for abstract inner classes that contain test methods but are not annotated with @Nested.

  • Stop reporting discovery issues for abstract test methods. Although they will not be executed, it is a valid pattern to annotate them with @Test for documentation purposes and override them in subclasses while re-declaring the @Test annotation.

New Features and Improvements

  • JAVA_26 has been added to the JRE enum for use with JRE-based execution conditions.

JUnit Vintage

No changes.

5.13.1

Date of Release: June 7, 2025

Scope: Bug fixes and enhancements since 5.13.0

For a complete list of all closed issues and pull requests for this release, consult the 5.13.1 milestone page in the JUnit repository on GitHub.

JUnit Platform

No changes.

JUnit Jupiter

Bug Fixes

  • The 5.13.0 release introduced a regression regarding the execution order in test classes containing both test methods and @Nested test classes. When classpath scanning was used during test discovery — for example, when resolving a package selector for a @Suite class — test methods in @Nested classes were executed before test methods in their enclosing class. This undesired change in behavior has now been reverted so that tests in @Nested test classes are always executed after tests in enclosing test classes again.

  • Fix support for AnnotationBasedArgumentsProvider implementations that override the deprecated provideArguments(ExtensionContext, Annotation) method.

JUnit Vintage

No changes

5.13.0

Date of Release: May 30, 2025

Scope:

  • Introduce @ClassTemplate and @ParameterizedClass support in JUnit Jupiter

  • Access to ParameterInfo for JUnit Jupiter extensions

  • New @SentenceFragment annotation for use with IndicativeSentences display name generator

  • Add --redirect-stdout and --redirect-stderr options to ConsoleLauncher

  • Introduce test discovery support in EngineTestKit

  • Reporting of discovery issues for test engines

  • Resource management for launcher sessions and execution requests

  • GraalVM: removal of native-image.properties files from JARs

  • Bug fixes and other minor improvements

For complete details consult the 5.13.0 Release Notes online.