Use new features from JUnit Jupiter 5.11
This commit primarily migrates to the new argumentSet() feature but also applies additional polishing to our use of parameterized tests. See gh-33395
This commit is contained in:
@@ -46,9 +46,9 @@ import okhttp3.mockwebserver.MockWebServer;
|
||||
import okhttp3.mockwebserver.RecordedRequest;
|
||||
import org.eclipse.jetty.client.Request;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Named;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
@@ -83,7 +83,7 @@ import org.springframework.web.reactive.function.client.WebClient.ResponseSpec;
|
||||
import org.springframework.web.testfixture.xml.Pojo;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Named.named;
|
||||
import static org.junit.jupiter.params.provider.Arguments.argumentSet;
|
||||
|
||||
/**
|
||||
* Integration tests using an {@link ExchangeFunction} through {@link WebClient}.
|
||||
@@ -99,17 +99,17 @@ class WebClientIntegrationTests {
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@ParameterizedTest(name = "[{index}] {0}")
|
||||
@ParameterizedTest
|
||||
@MethodSource("arguments")
|
||||
@interface ParameterizedWebClientTest {
|
||||
}
|
||||
|
||||
static Stream<Named<ClientHttpConnector>> arguments() {
|
||||
static Stream<Arguments> arguments() {
|
||||
return Stream.of(
|
||||
named("Reactor Netty", new ReactorClientHttpConnector()),
|
||||
named("JDK", new JdkClientHttpConnector()),
|
||||
named("Jetty", new JettyClientHttpConnector()),
|
||||
named("HttpComponents", new HttpComponentsClientHttpConnector())
|
||||
argumentSet("Reactor Netty", new ReactorClientHttpConnector()),
|
||||
argumentSet("JDK", new JdkClientHttpConnector()),
|
||||
argumentSet("Jetty", new JettyClientHttpConnector()),
|
||||
argumentSet("HttpComponents", new HttpComponentsClientHttpConnector())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ class ResourceWebHandlerTests {
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("httpMethods")
|
||||
@MethodSource("org.springframework.http.HttpMethod#values()")
|
||||
void resourceNotFound(HttpMethod method) {
|
||||
MockServerHttpRequest request = MockServerHttpRequest.method(method, "").build();
|
||||
MockServerWebExchange exchange = MockServerWebExchange.from(request);
|
||||
@@ -223,10 +223,6 @@ class ResourceWebHandlerTests {
|
||||
StepVerifier.create(mono).consumeErrorWith(ex -> assertThat(ex).isNotSameAs(exceptionRef.get())).verify();
|
||||
}
|
||||
|
||||
static Stream<HttpMethod> httpMethods() {
|
||||
return Arrays.stream(HttpMethod.values());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -684,7 +680,7 @@ class ResourceWebHandlerTests {
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("httpMethods")
|
||||
@MethodSource("org.springframework.http.HttpMethod#values()")
|
||||
void resolvePathWithTraversal(HttpMethod method) throws Exception {
|
||||
Resource location = new ClassPathResource("test/", getClass());
|
||||
this.handler.setLocations(List.of(location));
|
||||
|
||||
@@ -18,9 +18,9 @@ package org.springframework.web.reactive.result.method.annotation;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.junit.jupiter.api.Named;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
@@ -34,7 +34,6 @@ import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.reactive.config.EnableWebFlux;
|
||||
import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
|
||||
import org.springframework.web.testfixture.http.server.reactive.bootstrap.AbstractHttpServer;
|
||||
import org.springframework.web.testfixture.http.server.reactive.bootstrap.HttpServer;
|
||||
import org.springframework.web.testfixture.http.server.reactive.bootstrap.JettyCoreHttpServer;
|
||||
import org.springframework.web.testfixture.http.server.reactive.bootstrap.JettyHttpServer;
|
||||
import org.springframework.web.testfixture.http.server.reactive.bootstrap.ReactorHttpServer;
|
||||
@@ -42,7 +41,7 @@ import org.springframework.web.testfixture.http.server.reactive.bootstrap.Tomcat
|
||||
import org.springframework.web.testfixture.http.server.reactive.bootstrap.UndertowHttpServer;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Named.named;
|
||||
import static org.junit.jupiter.params.provider.Arguments.argumentSet;
|
||||
|
||||
/**
|
||||
* Integration tests related to the use of context paths.
|
||||
@@ -51,17 +50,17 @@ import static org.junit.jupiter.api.Named.named;
|
||||
*/
|
||||
class ContextPathIntegrationTests {
|
||||
|
||||
static Stream<Named<HttpServer>> httpServers() {
|
||||
static Stream<Arguments> httpServers() {
|
||||
return Stream.of(
|
||||
named("Jetty", new JettyHttpServer()),
|
||||
named("Jetty Core", new JettyCoreHttpServer()),
|
||||
named("Reactor Netty", new ReactorHttpServer()),
|
||||
named("Tomcat", new TomcatHttpServer()),
|
||||
named("Undertow", new UndertowHttpServer())
|
||||
argumentSet("Jetty", new JettyHttpServer()),
|
||||
argumentSet("Jetty Core", new JettyCoreHttpServer()),
|
||||
argumentSet("Reactor Netty", new ReactorHttpServer()),
|
||||
argumentSet("Tomcat", new TomcatHttpServer()),
|
||||
argumentSet("Undertow", new UndertowHttpServer())
|
||||
);
|
||||
}
|
||||
|
||||
@ParameterizedTest(name = "[{index}] {0}")
|
||||
@ParameterizedTest
|
||||
@MethodSource("httpServers")
|
||||
void multipleWebFluxApps(AbstractHttpServer server) throws Exception {
|
||||
AnnotationConfigApplicationContext context1 = new AnnotationConfigApplicationContext(WebAppConfig.class);
|
||||
|
||||
@@ -24,11 +24,13 @@ import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import java.net.URI;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.tomcat.websocket.server.WsContextListener;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Named;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
import org.xnio.OptionMap;
|
||||
@@ -69,6 +71,8 @@ import org.springframework.web.testfixture.http.server.reactive.bootstrap.Reacto
|
||||
import org.springframework.web.testfixture.http.server.reactive.bootstrap.TomcatHttpServer;
|
||||
import org.springframework.web.testfixture.http.server.reactive.bootstrap.UndertowHttpServer;
|
||||
|
||||
import static org.junit.jupiter.api.Named.named;
|
||||
|
||||
/**
|
||||
* Base class for reactive WebSocket integration tests. Subclasses must implement
|
||||
* {@link #getWebConfigClass()} to return Spring config class with (server-side)
|
||||
@@ -84,34 +88,35 @@ abstract class AbstractReactiveWebSocketIntegrationTests {
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@ParameterizedTest(name = "[{index}] client[{0}], server[{1}]")
|
||||
@ParameterizedTest(name = "[{index}] client = {0} , server = {1}")
|
||||
@MethodSource("arguments")
|
||||
@interface ParameterizedWebSocketTest {
|
||||
}
|
||||
|
||||
static Stream<Object[]> arguments() throws IOException {
|
||||
|
||||
WebSocketClient[] clients = new WebSocketClient[] {
|
||||
new TomcatWebSocketClient(),
|
||||
new JettyWebSocketClient(),
|
||||
new ReactorNettyWebSocketClient(),
|
||||
new UndertowWebSocketClient(Xnio.getInstance().createWorker(OptionMap.EMPTY))
|
||||
};
|
||||
List<Named<WebSocketClient>> clients = List.of(
|
||||
named(TomcatWebSocketClient.class.getSimpleName(), new TomcatWebSocketClient()),
|
||||
named(JettyWebSocketClient.class.getSimpleName(), new JettyWebSocketClient()),
|
||||
named(ReactorNettyWebSocketClient.class.getSimpleName(), new ReactorNettyWebSocketClient()),
|
||||
named(UndertowWebSocketClient.class.getSimpleName(), new UndertowWebSocketClient(Xnio.getInstance().createWorker(OptionMap.EMPTY)))
|
||||
);
|
||||
|
||||
Map<HttpServer, Class<?>> servers = new LinkedHashMap<>();
|
||||
servers.put(new TomcatHttpServer(TMP_DIR.getAbsolutePath(), WsContextListener.class), TomcatConfig.class);
|
||||
servers.put(new JettyHttpServer(), JettyConfig.class);
|
||||
servers.put(new JettyCoreHttpServer(), JettyCoreConfig.class);
|
||||
servers.put(new ReactorHttpServer(), ReactorNettyConfig.class);
|
||||
servers.put(new UndertowHttpServer(), UndertowConfig.class);
|
||||
Map<Named<HttpServer>, Class<?>> servers = new LinkedHashMap<>();
|
||||
servers.put(named(TomcatHttpServer.class.getSimpleName(), new TomcatHttpServer(TMP_DIR.getAbsolutePath(), WsContextListener.class)),
|
||||
TomcatConfig.class);
|
||||
servers.put(named(JettyHttpServer.class.getSimpleName(), new JettyHttpServer()), JettyConfig.class);
|
||||
servers.put(named(JettyCoreHttpServer.class.getSimpleName(), new JettyCoreHttpServer()), JettyCoreConfig.class);
|
||||
servers.put(named(ReactorHttpServer.class.getSimpleName(), new ReactorHttpServer()), ReactorNettyConfig.class);
|
||||
servers.put(named(UndertowHttpServer.class.getSimpleName(), new UndertowHttpServer()), UndertowConfig.class);
|
||||
|
||||
// Try each client once against each server
|
||||
|
||||
Flux<WebSocketClient> f1 = Flux.fromArray(clients)
|
||||
Flux<Named<WebSocketClient>> f1 = Flux.fromIterable(clients)
|
||||
.concatMap(c -> Mono.just(c).repeat(servers.size() - 1));
|
||||
|
||||
Flux<Map.Entry<HttpServer, Class<?>>> f2 = Flux.fromIterable(servers.entrySet())
|
||||
.repeat(clients.length - 1)
|
||||
Flux<Map.Entry<Named<HttpServer>, Class<?>>> f2 = Flux.fromIterable(servers.entrySet())
|
||||
.repeat(clients.size() - 1)
|
||||
.share();
|
||||
|
||||
return Flux.zip(f1, f2.map(Map.Entry::getKey), f2.map(Map.Entry::getValue))
|
||||
|
||||
Reference in New Issue
Block a user