Skip to content

Commit d84bf18

Browse files
committed
Upgrade to JUnit 6.0 RC3
See gh-35124
1 parent 7edb0b3 commit d84bf18

File tree

13 files changed

+39
-48
lines changed

13 files changed

+39
-48
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ configure([rootProject] + javaProjects) { project ->
7575
"https://hc.apache.org/httpcomponents-client-5.5.x/current/httpclient5/apidocs/",
7676
"https://projectreactor.io/docs/test/release/api/",
7777
"https://junit.org/junit4/javadoc/4.13.2/",
78-
"https://docs.junit.org/5.13.4/api/",
78+
"https://docs.junit.org/6.0.0-RC3/api/",
7979
"https://www.reactive-streams.org/reactive-streams-1.0.3-javadoc/",
8080
//"https://javadoc.io/static/io.rsocket/rsocket-core/1.1.1/",
8181
"https://r2dbc.io/spec/1.0.0.RELEASE/api/",

framework-platform/framework-platform.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ dependencies {
1919
api(platform("org.eclipse.jetty.ee11:jetty-ee11-bom:12.1.1"))
2020
api(platform("org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.10.2"))
2121
api(platform("org.jetbrains.kotlinx:kotlinx-serialization-bom:1.9.0"))
22-
api(platform("org.junit:junit-bom:5.13.4"))
22+
api(platform("org.junit:junit-bom:6.0.0-RC3"))
2323
api(platform("org.mockito:mockito-bom:5.19.0"))
2424
api(platform("tools.jackson:jackson-bom:3.0.0-rc10"))
2525

spring-core-test/src/main/java/org/springframework/core/test/tools/CompileWithForkedClassLoaderExtension.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.lang.reflect.Method;
2020

21+
import org.jspecify.annotations.Nullable;
2122
import org.junit.jupiter.api.extension.ExtensionContext;
2223
import org.junit.jupiter.api.extension.InvocationInterceptor;
2324
import org.junit.jupiter.api.extension.ReflectiveInvocationContext;
@@ -44,53 +45,53 @@
4445
class CompileWithForkedClassLoaderExtension implements InvocationInterceptor {
4546

4647
@Override
47-
public void interceptBeforeAllMethod(Invocation<Void> invocation,
48+
public void interceptBeforeAllMethod(Invocation<@Nullable Void> invocation,
4849
ReflectiveInvocationContext<Method> invocationContext,
4950
ExtensionContext extensionContext) throws Throwable {
5051

5152
intercept(invocation, extensionContext);
5253
}
5354

5455
@Override
55-
public void interceptBeforeEachMethod(Invocation<Void> invocation,
56+
public void interceptBeforeEachMethod(Invocation<@Nullable Void> invocation,
5657
ReflectiveInvocationContext<Method> invocationContext,
5758
ExtensionContext extensionContext) throws Throwable {
5859

5960
intercept(invocation, extensionContext);
6061
}
6162

6263
@Override
63-
public void interceptAfterEachMethod(Invocation<Void> invocation,
64+
public void interceptAfterEachMethod(Invocation<@Nullable Void> invocation,
6465
ReflectiveInvocationContext<Method> invocationContext,
6566
ExtensionContext extensionContext) throws Throwable {
6667

6768
intercept(invocation, extensionContext);
6869
}
6970

7071
@Override
71-
public void interceptAfterAllMethod(Invocation<Void> invocation,
72+
public void interceptAfterAllMethod(Invocation<@Nullable Void> invocation,
7273
ReflectiveInvocationContext<Method> invocationContext,
7374
ExtensionContext extensionContext) throws Throwable {
7475

7576
intercept(invocation, extensionContext);
7677
}
7778

7879
@Override
79-
public void interceptTestMethod(Invocation<Void> invocation,
80+
public void interceptTestMethod(Invocation<@Nullable Void> invocation,
8081
ReflectiveInvocationContext<Method> invocationContext,
8182
ExtensionContext extensionContext) throws Throwable {
8283

8384
intercept(invocation, extensionContext,
8485
() -> runTestWithModifiedClassPath(invocationContext, extensionContext));
8586
}
8687

87-
private void intercept(Invocation<Void> invocation, ExtensionContext extensionContext)
88+
private void intercept(Invocation<@Nullable Void> invocation, ExtensionContext extensionContext)
8889
throws Throwable {
8990

9091
intercept(invocation, extensionContext, Action.NONE);
9192
}
9293

93-
private void intercept(Invocation<Void> invocation, ExtensionContext extensionContext,
94+
private void intercept(Invocation<@Nullable Void> invocation, ExtensionContext extensionContext,
9495
Action action) throws Throwable {
9596

9697
if (isUsingForkedClassPathLoader(extensionContext)) {

spring-test/spring-test.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ test {
110110
// `include` test filters and system properties are configured in
111111
// org.springframework.build.TestConventions in buildSrc.
112112
filter.excludeTestsMatching("*TestCase")
113+
// Override critical severity defined in TestConventions, since spring-test
114+
// relies on the Vintage test engine for JUnit 4 support.
115+
systemProperty("junit.platform.discovery.issue.severity.critical", "WARNING")
113116
// Optionally configure Java Util Logging for the JUnit Platform.
114117
// systemProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager")
115118
}

spring-test/src/main/java/org/springframework/test/context/junit/jupiter/SpringExtension.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ private void validateAutowiredConfig(ExtensionContext context) {
169169
// re-validate all methods for the same test class multiple times.
170170
Store store = context.getStore(AUTOWIRED_VALIDATION_NAMESPACE);
171171

172-
String errorMessage = store.getOrComputeIfAbsent(context.getRequiredTestClass(), testClass -> {
172+
String errorMessage = store.computeIfAbsent(context.getRequiredTestClass(), testClass -> {
173173
Method[] methodsWithErrors =
174174
ReflectionUtils.getUniqueDeclaredMethods(testClass, autowiredTestOrLifecycleMethodFilter);
175175
return (methodsWithErrors.length == 0 ? NO_VIOLATIONS_DETECTED :
@@ -197,7 +197,7 @@ private void validateRecordApplicationEventsConfig(ExtensionContext context) {
197197
// re-validate the configuration for the same test class multiple times.
198198
Store store = context.getStore(RECORD_APPLICATION_EVENTS_VALIDATION_NAMESPACE);
199199

200-
String errorMessage = store.getOrComputeIfAbsent(context.getRequiredTestClass(), testClass -> {
200+
String errorMessage = store.computeIfAbsent(context.getRequiredTestClass(), testClass -> {
201201
boolean recording = TestContextAnnotationUtils.hasAnnotation(testClass, RecordApplicationEvents.class);
202202
if (!recording) {
203203
return NO_VIOLATIONS_DETECTED;
@@ -358,7 +358,7 @@ static TestContextManager getTestContextManager(ExtensionContext context) {
358358
Assert.notNull(context, "ExtensionContext must not be null");
359359
Class<?> testClass = context.getRequiredTestClass();
360360
Store store = getStore(context);
361-
return store.getOrComputeIfAbsent(testClass, TestContextManager::new, TestContextManager.class);
361+
return store.computeIfAbsent(testClass, TestContextManager::new, TestContextManager.class);
362362
}
363363

364364
private static Store getStore(ExtensionContext context) {
@@ -372,7 +372,6 @@ private static Store getStore(ExtensionContext context) {
372372
* the supplied {@link TestContextManager}.
373373
* @since 6.1
374374
*/
375-
@SuppressWarnings("NullAway") // org.junit.jupiter.api.extension.ExecutableInvoker is not null marked
376375
private static void registerMethodInvoker(TestContextManager testContextManager, ExtensionContext context) {
377376
testContextManager.getTestContext().setMethodInvoker(context.getExecutableInvoker()::invoke);
378377
}

spring-test/src/test/java/org/springframework/test/context/aot/AotIntegrationTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656

5757
import static org.assertj.core.api.Assertions.assertThat;
5858
import static org.junit.platform.engine.discovery.ClassNameFilter.includeClassNamePatterns;
59-
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
59+
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClasses;
6060
import static org.junit.platform.launcher.TagFilter.excludeTags;
6161

6262
/**
@@ -205,11 +205,11 @@ private static void runTestsInAotMode(long expectedNumTests, List<Class<?>> test
205205
try {
206206
System.setProperty(AotDetector.AOT_ENABLED, "true");
207207

208-
LauncherDiscoveryRequestBuilder builder = LauncherDiscoveryRequestBuilder.request()
208+
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
209+
.selectors(selectClasses(testClasses))
209210
.filters(includeClassNamePatterns(".*Tests?$"))
210-
.filters(excludeTags("failing-test-case"));
211-
testClasses.forEach(testClass -> builder.selectors(selectClass(testClass)));
212-
LauncherDiscoveryRequest request = builder.build();
211+
.filters(excludeTags("failing-test-case"))
212+
.build();
213213
SummaryGeneratingListener listener = new SummaryGeneratingListener();
214214
LauncherFactory.create().execute(request, listener);
215215
TestExecutionSummary summary = listener.getSummary();

spring-test/src/test/java/org/springframework/test/context/cache/ContextFailureThresholdTests.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
3232

3333
import static org.assertj.core.api.Assertions.assertThat;
34-
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
34+
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClasses;
3535
import static org.springframework.test.context.CacheAwareContextLoaderDelegate.CONTEXT_FAILURE_THRESHOLD_PROPERTY_NAME;
3636
import static org.springframework.test.context.CacheAwareContextLoaderDelegate.DEFAULT_CONTEXT_FAILURE_THRESHOLD;
3737
import static org.springframework.test.context.cache.ContextCacheTestUtils.assertContextCacheStatistics;
@@ -85,14 +85,14 @@ void thresholdEffectivelyDisabled() {
8585
}
8686

8787
private static void runTests() {
88-
EngineTestKit.engine("junit-jupiter")//
89-
.selectors(//
90-
selectClass(PassingTestCase.class), // 3 passing
91-
selectClass(FailingConfigTestCase.class), // 3 failing
92-
selectClass(SharedFailingConfigTestCase.class) // 3 failing
93-
)//
94-
.execute()//
95-
.testEvents()//
88+
EngineTestKit.engine("junit-jupiter")
89+
.selectors(selectClasses(
90+
PassingTestCase.class, // 3 passing
91+
FailingConfigTestCase.class, // 3 failing
92+
SharedFailingConfigTestCase.class // 3 failing
93+
))
94+
.execute()
95+
.testEvents()
9696
.assertStatistics(stats -> stats.started(9).succeeded(3).failed(6));
9797
assertContextCacheStatistics(1, 2, (1 + 3 + 3));
9898
}

spring-test/src/test/java/org/springframework/test/context/cache/UnusedContextsIntegrationTests.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,13 @@
1616

1717
package org.springframework.test.context.cache;
1818

19-
import java.util.Arrays;
20-
2119
import org.junit.jupiter.api.AfterEach;
2220
import org.junit.jupiter.api.BeforeEach;
2321
import org.junit.jupiter.api.ClassOrderer;
2422
import org.junit.jupiter.api.Nested;
2523
import org.junit.jupiter.api.Order;
2624
import org.junit.jupiter.api.Test;
2725
import org.junit.jupiter.api.TestClassOrder;
28-
import org.junit.platform.engine.discovery.ClassSelector;
29-
import org.junit.platform.engine.discovery.DiscoverySelectors;
3026
import org.junit.platform.testkit.engine.EngineTestKit;
3127

3228
import org.springframework.beans.factory.annotation.Value;
@@ -38,6 +34,7 @@
3834
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
3935

4036
import static org.assertj.core.api.Assertions.assertThat;
37+
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClasses;
4138
import static org.springframework.test.context.NestedTestConfiguration.EnclosingConfiguration.INHERIT;
4239
import static org.springframework.test.context.NestedTestConfiguration.EnclosingConfiguration.OVERRIDE;
4340

@@ -209,10 +206,6 @@ private static void runTestClasses(int expectedTestCount, Class<?>... classes) {
209206
.assertStatistics(stats -> stats.started(expectedTestCount).succeeded(expectedTestCount));
210207
}
211208

212-
private static ClassSelector[] selectClasses(Class<?>... classes) {
213-
return Arrays.stream(classes).map(DiscoverySelectors::selectClass).toArray(ClassSelector[]::new);
214-
}
215-
216209

217210
@SpringJUnitConfig(EventTracker.class)
218211
@ContextCustomizerFactories(DisplayNameCustomizerFactory.class)

spring-test/src/test/java/org/springframework/test/context/event/EagerTestExecutionEventPublishingTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
4141

4242
import static org.assertj.core.api.Assertions.assertThat;
43-
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
43+
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClasses;
4444

4545
/**
4646
* Tests for the {@link EventPublishingTestExecutionListener} which verify that
@@ -65,7 +65,7 @@ void resetEvents() {
6565
@Test
6666
void beforeTestClassEventIsNotPublishedByDefaultForFirstTestClass() {
6767
EngineTestKit.engine("junit-jupiter")//
68-
.selectors(selectClass(LazyTestCase1.class), selectClass(LazyTestCase2.class))//
68+
.selectors(selectClasses(LazyTestCase1.class, LazyTestCase2.class))//
6969
.execute()//
7070
.testEvents()//
7171
.assertStatistics(stats -> stats.started(2).succeeded(2).failed(0));
@@ -93,7 +93,7 @@ void beforeTestClassEventIsNotPublishedByDefaultForFirstTestClass() {
9393
@Test
9494
void beforeTestClassEventIsPublishedForAllTestClassesIfCustomListenerEagerlyLoadsContext() {
9595
EngineTestKit.engine("junit-jupiter")//
96-
.selectors(selectClass(EagerTestCase1.class), selectClass(EagerTestCase2.class))//
96+
.selectors(selectClasses(EagerTestCase1.class, EagerTestCase2.class))//
9797
.execute()//
9898
.testEvents()//
9999
.assertStatistics(stats -> stats.started(2).succeeded(2).failed(0));

spring-test/src/test/java/org/springframework/test/context/jdbc/GeneratedDatabaseNamesTests.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.springframework.test.context.junit.jupiter.SpringExtension;
3030

3131
import static org.assertj.core.api.Assertions.assertThat;
32-
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
32+
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClasses;
3333

3434
/**
3535
* Test suite to investigate claims raised in
@@ -66,12 +66,7 @@ class GeneratedDatabaseNamesTests {
6666
@Test
6767
void runTestsWithGeneratedDatabaseNames() {
6868
EngineTestKit.engine("junit-jupiter")
69-
.selectors(
70-
selectClass(TestClass1A.class),
71-
selectClass(TestClass1B.class),
72-
selectClass(TestClass2A.class),
73-
selectClass(TestClass2B.class)
74-
)
69+
.selectors(selectClasses(TestClass1A.class, TestClass1B.class, TestClass2A.class, TestClass2B.class))
7570
.execute()
7671
.testEvents()
7772
.assertStatistics(stats -> stats.started(4).succeeded(4).failed(0));

0 commit comments

Comments
 (0)