From 324b254849df83ff44ec96a0e534497ed99dade0 Mon Sep 17 00:00:00 2001 From: Sam Brannen <104798+sbrannen@users.noreply.github.com> Date: Sat, 1 Nov 2025 11:13:37 +0100 Subject: [PATCH] Upgrade to JUnit 6.0.1 and prevent AOT scanning failure for JUnit 4 tests This commit upgrades our test suite to use JUnit 6.0.1 and removes the systemProperty("junit.platform.discovery.issue.severity.critical", "WARNING") configuration from spring-test.gradle, so that all discovery issues will fail the build for the spring-test module as well. In addition, this commit prevents potential AOT test scanning failures for JUnit 4 tests by setting the "junit.vintage.discovery.issue.reporting.enabled" configuration parameter to "false" in TestClassScanner. See https://github.com/junit-team/junit-framework/issues/5030 Closes gh-35740 --- build.gradle | 2 +- framework-platform/framework-platform.gradle | 2 +- spring-test/spring-test.gradle | 7 ++++--- .../test/context/aot/TestClassScanner.java | 7 ++++++- .../context/SpringTestContextFrameworkTestSuite.java | 9 +++++++-- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 6f122abf6c6..f6e87081849 100644 --- a/build.gradle +++ b/build.gradle @@ -75,7 +75,7 @@ configure([rootProject] + javaProjects) { project -> "https://hc.apache.org/httpcomponents-client-5.5.x/current/httpclient5/apidocs/", "https://projectreactor.io/docs/test/release/api/", "https://junit.org/junit4/javadoc/4.13.2/", - "https://docs.junit.org/6.0.0/api/", + "https://docs.junit.org/6.0.1/api/", "https://www.reactive-streams.org/reactive-streams-1.0.3-javadoc/", "https://r2dbc.io/spec/1.0.0.RELEASE/api/", "https://jspecify.dev/docs/api/" diff --git a/framework-platform/framework-platform.gradle b/framework-platform/framework-platform.gradle index 4f254960eed..88e1ec38e77 100644 --- a/framework-platform/framework-platform.gradle +++ b/framework-platform/framework-platform.gradle @@ -19,7 +19,7 @@ dependencies { api(platform("org.eclipse.jetty.ee11:jetty-ee11-bom:12.1.3")) api(platform("org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.10.2")) api(platform("org.jetbrains.kotlinx:kotlinx-serialization-bom:1.9.0")) - api(platform("org.junit:junit-bom:6.0.0")) + api(platform("org.junit:junit-bom:6.0.1")) api(platform("org.mockito:mockito-bom:5.20.0")) api(platform("tools.jackson:jackson-bom:3.0.1")) diff --git a/spring-test/spring-test.gradle b/spring-test/spring-test.gradle index 16400732fc1..ea631c65786 100644 --- a/spring-test/spring-test.gradle +++ b/spring-test/spring-test.gradle @@ -110,9 +110,10 @@ test { // `include` test filters and system properties are configured in // org.springframework.build.TestConventions in buildSrc. filter.excludeTestsMatching("*TestCase") - // Override critical severity defined in TestConventions, since spring-test - // relies on the Vintage test engine for JUnit 4 support. - systemProperty("junit.platform.discovery.issue.severity.critical", "WARNING") + // Since spring-test relies on the Vintage test engine for JUnit 4 support, + // we disable reporting of the "deprecated" discovery issue, because that + // would otherwise fail the build. + systemProperty("junit.vintage.discovery.issue.reporting.enabled", "false") // Optionally configure Java Util Logging for the JUnit Platform. // systemProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager") } diff --git a/spring-test/src/main/java/org/springframework/test/context/aot/TestClassScanner.java b/spring-test/src/main/java/org/springframework/test/context/aot/TestClassScanner.java index c093a336322..8280410eff6 100644 --- a/spring-test/src/main/java/org/springframework/test/context/aot/TestClassScanner.java +++ b/spring-test/src/main/java/org/springframework/test/context/aot/TestClassScanner.java @@ -142,7 +142,12 @@ class TestClassScanner { if (packageNames.length > 0) { builder.filters(includePackageNames(packageNames)); } - LauncherDiscoveryRequest request = builder.build(); + LauncherDiscoveryRequest request = builder + // In case junit.platform.discovery.issue.severity.critical=INFO has been configured, + // we do not want scanning to fail due to the deprecation of the Vintage test engine. + // So, we disable reporting of the deprecation discovery issue. + .configurationParameter("junit.vintage.discovery.issue.reporting.enabled", "false") + .build(); Launcher launcher = LauncherFactory.create(); TestPlan testPlan = launcher.discover(request); diff --git a/spring-test/src/test/java/org/springframework/test/context/SpringTestContextFrameworkTestSuite.java b/spring-test/src/test/java/org/springframework/test/context/SpringTestContextFrameworkTestSuite.java index 8985ab4f840..e45355af297 100644 --- a/spring-test/src/test/java/org/springframework/test/context/SpringTestContextFrameworkTestSuite.java +++ b/spring-test/src/test/java/org/springframework/test/context/SpringTestContextFrameworkTestSuite.java @@ -46,9 +46,14 @@ import org.junit.platform.suite.api.Suite; @SelectPackages("org.springframework.test.context") @IncludeClassNamePatterns(".*Tests?$") @ExcludeTags("failing-test-case") +@ConfigurationParameter( + key = "junit.platform.discovery.issue.severity.critical", + value = "INFO") +@ConfigurationParameter( + key = "junit.vintage.discovery.issue.reporting.enabled", + value = "false") @ConfigurationParameter( key = ClassOrderer.DEFAULT_ORDER_PROPERTY_NAME, - value = "org.junit.jupiter.api.ClassOrderer$ClassName" - ) + value = "org.junit.jupiter.api.ClassOrderer$ClassName") class SpringTestContextFrameworkTestSuite { }