From f6255cc691479fe87c8bbeebb888a32b472ebc24 Mon Sep 17 00:00:00 2001 From: Tobias Gesellchen Date: Fri, 13 Nov 2020 18:42:27 +0100 Subject: [PATCH 1/2] Check that WebClient is available This commit reinstanties the isWeBClientPresent() check so that WebTestClientContextCustomizer is only added if a web client is available. See gh-24152 --- ...WebTestClientContextCustomizerFactory.java | 2 +- ...ntextCustomizerFactoryWithWebfluxTest.java | 55 ++++++++++++++++++ ...xtCustomizerFactoryWithoutWebfluxTest.java | 57 +++++++++++++++++++ 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithWebfluxTest.java create mode 100644 spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithoutWebfluxTest.java diff --git a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactory.java b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactory.java index b8d4216640..8582af1bb3 100644 --- a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactory.java +++ b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactory.java @@ -39,7 +39,7 @@ class WebTestClientContextCustomizerFactory implements ContextCustomizerFactory List configAttributes) { SpringBootTest springBootTest = TestContextAnnotationUtils.findMergedAnnotation(testClass, SpringBootTest.class); - return (springBootTest != null) ? new WebTestClientContextCustomizer() : null; + return (springBootTest != null && isWebClientPresent()) ? new WebTestClientContextCustomizer() : null; } private boolean isWebClientPresent() { diff --git a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithWebfluxTest.java b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithWebfluxTest.java new file mode 100644 index 0000000000..2eb87d3fdd --- /dev/null +++ b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithWebfluxTest.java @@ -0,0 +1,55 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.boot.test.web.reactive.server; + +import java.util.Collections; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextCustomizer; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link WebTestClientContextCustomizerFactory} when spring webflux is on the + * classpath. + * + * @author Tobias Gesellchen + */ +class WebTestClientContextCustomizerFactoryWithWebfluxTest { + + WebTestClientContextCustomizerFactory contextCustomizerFactory; + + @BeforeEach + void setup() { + this.contextCustomizerFactory = new WebTestClientContextCustomizerFactory(); + } + + @Test + void createContextCustomizer() { + ContextCustomizer contextCustomizer = this.contextCustomizerFactory.createContextCustomizer(TestClass.class, + Collections.emptyList()); + assertThat(contextCustomizer).isNotNull(); + } + + @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) + static class TestClass { + + } + +} diff --git a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithoutWebfluxTest.java b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithoutWebfluxTest.java new file mode 100644 index 0000000000..4b16335280 --- /dev/null +++ b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithoutWebfluxTest.java @@ -0,0 +1,57 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.boot.test.web.reactive.server; + +import java.util.Collections; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.testsupport.classpath.ClassPathExclusions; +import org.springframework.test.context.ContextCustomizer; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link WebTestClientContextCustomizerFactory} when spring webflux is not on + * the classpath. + * + * @author Tobias Gesellchen + */ +@ClassPathExclusions("spring-webflux*.jar") +public class WebTestClientContextCustomizerFactoryWithoutWebfluxTest { + + WebTestClientContextCustomizerFactory contextCustomizerFactory; + + @BeforeEach + void setup() { + this.contextCustomizerFactory = new WebTestClientContextCustomizerFactory(); + } + + @Test + void doNotCreateContextCustomizer() { + ContextCustomizer contextCustomizer = this.contextCustomizerFactory.createContextCustomizer(TestClass.class, + Collections.emptyList()); + assertThat(contextCustomizer).isNull(); + } + + @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) + static class TestClass { + + } + +} From f248cfe79c8cd82ce7914dca6d6a3cae11d7ccf0 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 25 Nov 2020 14:52:47 +0100 Subject: [PATCH 2/2] Polish "Check that WebClient is available" See gh-24152 --- ...ntextCustomizerFactoryWithWebfluxTest.java | 55 ------------------- ...omizerWithoutWebfluxIntegrationTests.java} | 20 +++---- 2 files changed, 7 insertions(+), 68 deletions(-) delete mode 100644 spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithWebfluxTest.java rename spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/{WebTestClientContextCustomizerFactoryWithoutWebfluxTest.java => WebTestClientContextCustomizerWithoutWebfluxIntegrationTests.java} (71%) diff --git a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithWebfluxTest.java b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithWebfluxTest.java deleted file mode 100644 index 2eb87d3fdd..0000000000 --- a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithWebfluxTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2012-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.boot.test.web.reactive.server; - -import java.util.Collections; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ContextCustomizer; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link WebTestClientContextCustomizerFactory} when spring webflux is on the - * classpath. - * - * @author Tobias Gesellchen - */ -class WebTestClientContextCustomizerFactoryWithWebfluxTest { - - WebTestClientContextCustomizerFactory contextCustomizerFactory; - - @BeforeEach - void setup() { - this.contextCustomizerFactory = new WebTestClientContextCustomizerFactory(); - } - - @Test - void createContextCustomizer() { - ContextCustomizer contextCustomizer = this.contextCustomizerFactory.createContextCustomizer(TestClass.class, - Collections.emptyList()); - assertThat(contextCustomizer).isNotNull(); - } - - @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) - static class TestClass { - - } - -} diff --git a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithoutWebfluxTest.java b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerWithoutWebfluxIntegrationTests.java similarity index 71% rename from spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithoutWebfluxTest.java rename to spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerWithoutWebfluxIntegrationTests.java index 4b16335280..954fdbf5e5 100644 --- a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerFactoryWithoutWebfluxTest.java +++ b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerWithoutWebfluxIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,6 @@ package org.springframework.boot.test.web.reactive.server; import java.util.Collections; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @@ -31,26 +30,21 @@ import static org.assertj.core.api.Assertions.assertThat; * the classpath. * * @author Tobias Gesellchen + * @author Stephane Nicoll */ @ClassPathExclusions("spring-webflux*.jar") -public class WebTestClientContextCustomizerFactoryWithoutWebfluxTest { - - WebTestClientContextCustomizerFactory contextCustomizerFactory; - - @BeforeEach - void setup() { - this.contextCustomizerFactory = new WebTestClientContextCustomizerFactory(); - } +public class WebTestClientContextCustomizerWithoutWebfluxIntegrationTests { @Test - void doNotCreateContextCustomizer() { - ContextCustomizer contextCustomizer = this.contextCustomizerFactory.createContextCustomizer(TestClass.class, + void customizerIsNotCreatedWithoutWebClient() { + WebTestClientContextCustomizerFactory contextCustomizerFactory = new WebTestClientContextCustomizerFactory(); + ContextCustomizer contextCustomizer = contextCustomizerFactory.createContextCustomizer(TestClass.class, Collections.emptyList()); assertThat(contextCustomizer).isNull(); } @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) - static class TestClass { + private static class TestClass { }