Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
96f85a40
Commit
96f85a40
authored
Sep 23, 2019
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support customization of WebTestClient.Builder when using @SpringBootTest
Closes gh-15132
parent
100fc8cf
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
74 additions
and
7 deletions
+74
-7
spring-boot-features.adoc
...ing-boot-docs/src/main/asciidoc/spring-boot-features.adoc
+7
-0
SpringBootWebTestClientBuilderCustomizer.java
...eb/reactive/SpringBootWebTestClientBuilderCustomizer.java
+1
-0
WebTestClientAutoConfiguration.java
...onfigure/web/reactive/WebTestClientAutoConfiguration.java
+1
-0
WebTestClientBuilderCustomizer.java
...onfigure/web/reactive/WebTestClientBuilderCustomizer.java
+5
-7
WebTestClientBuilderCustomizer.java
...t/web/reactive/server/WebTestClientBuilderCustomizer.java
+38
-0
WebTestClientContextCustomizer.java
...t/web/reactive/server/WebTestClientContextCustomizer.java
+8
-0
WebTestClientContextCustomizerIntegrationTests.java
...erver/WebTestClientContextCustomizerIntegrationTests.java
+14
-0
No files found.
spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
View file @
96f85a40
...
...
@@ -6052,6 +6052,13 @@ include::{code-examples}/test/web/RandomPortTestRestTemplateExampleTests.java[ta
[[boot-features-testing-spring-boot-applications-customizing-web-test-client]]
==== Customizing WebTestClient
To customize the `WebTestClient` bean, configure a `WebTestClientBuilderCustomizer` bean.
Any such beans are called with the `WebTestClient.Builder` that is used to create the `WebTestClient`.
[[boot-features-testing-spring-boot-applications-jmx]]
==== Using JMX
As the test context framework caches context, JMX is disabled by default to prevent identical components to register on the same domain.
...
...
spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/reactive/SpringBootWebTestClientBuilderCustomizer.java
View file @
96f85a40
...
...
@@ -20,6 +20,7 @@ import java.time.Duration;
import
java.util.Collection
;
import
java.util.function.Consumer
;
import
org.springframework.boot.test.web.reactive.server.WebTestClientBuilderCustomizer
;
import
org.springframework.boot.web.codec.CodecCustomizer
;
import
org.springframework.http.codec.ClientCodecConfigurer
;
import
org.springframework.test.web.reactive.server.WebTestClient
;
...
...
spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/reactive/WebTestClientAutoConfiguration.java
View file @
96f85a40
...
...
@@ -28,6 +28,7 @@ import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration
import
org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.boot.test.web.reactive.server.WebTestClientBuilderCustomizer
;
import
org.springframework.boot.web.codec.CodecCustomizer
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.annotation.Bean
;
...
...
spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/reactive/WebTestClientBuilderCustomizer.java
View file @
96f85a40
...
...
@@ -26,14 +26,12 @@ import org.springframework.test.web.reactive.server.WebTestClient.Builder;
* @author Andy Wilkinson
* @since 2.0.0
* @see WebTestClientAutoConfiguration
* @deprecated since 2.2 in favor of
* {@link org.springframework.boot.test.web.reactive.server.WebTestClientBuilderCustomizer}
*/
@FunctionalInterface
public
interface
WebTestClientBuilderCustomizer
{
/**
* Customize the given {@code builder}.
* @param builder the builder
*/
void
customize
(
Builder
builder
);
@Deprecated
public
interface
WebTestClientBuilderCustomizer
extends
org
.
springframework
.
boot
.
test
.
web
.
reactive
.
server
.
WebTestClientBuilderCustomizer
{
}
spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/reactive/server/WebTestClientBuilderCustomizer.java
0 → 100644
View file @
96f85a40
/*
* 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
org.springframework.test.web.reactive.server.WebTestClient.Builder
;
/**
* A customizer for a {@link Builder}. Any {@code WebTestClientBuilderCustomizer} beans
* found in the application context will be {@link #customize called} to customize the
* auto-configured {@link Builder}.
*
* @author Andy Wilkinson
* @since 2.2.0
*/
@FunctionalInterface
public
interface
WebTestClientBuilderCustomizer
{
/**
* Customize the given {@code builder}.
* @param builder the builder
*/
void
customize
(
Builder
builder
);
}
spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizer.java
View file @
96f85a40
...
...
@@ -160,6 +160,7 @@ class WebTestClientContextCustomizer implements ContextCustomizer {
String
port
=
this
.
applicationContext
.
getEnvironment
().
getProperty
(
"local.server.port"
,
"8080"
);
String
baseUrl
=
(
sslEnabled
?
"https"
:
"http"
)
+
"://localhost:"
+
port
;
WebTestClient
.
Builder
builder
=
WebTestClient
.
bindToServer
();
customizeWebTestClientBuilder
(
builder
,
this
.
applicationContext
);
customizeWebTestClientCodecs
(
builder
,
this
.
applicationContext
);
return
builder
.
baseUrl
(
baseUrl
).
build
();
}
...
...
@@ -175,6 +176,13 @@ class WebTestClientContextCustomizer implements ContextCustomizer {
}
}
private
void
customizeWebTestClientBuilder
(
WebTestClient
.
Builder
clientBuilder
,
ApplicationContext
context
)
{
for
(
WebTestClientBuilderCustomizer
customizer
:
context
.
getBeansOfType
(
WebTestClientBuilderCustomizer
.
class
).
values
())
{
customizer
.
customize
(
clientBuilder
);
}
}
private
void
customizeWebTestClientCodecs
(
WebTestClient
.
Builder
clientBuilder
,
ApplicationContext
context
)
{
Collection
<
CodecCustomizer
>
codecCustomizers
=
context
.
getBeansOfType
(
CodecCustomizer
.
class
).
values
();
if
(!
CollectionUtils
.
isEmpty
(
codecCustomizers
))
{
...
...
spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/reactive/server/WebTestClientContextCustomizerIntegrationTests.java
View file @
96f85a40
...
...
@@ -33,6 +33,11 @@ import org.springframework.http.server.reactive.ServerHttpRequest;
import
org.springframework.http.server.reactive.ServerHttpResponse
;
import
org.springframework.test.annotation.DirtiesContext
;
import
org.springframework.test.web.reactive.server.WebTestClient
;
import
org.springframework.test.web.reactive.server.WebTestClient.Builder
;
import
static
org
.
mockito
.
ArgumentMatchers
.
any
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
verify
;
/**
* Integration test for {@link WebTestClientContextCustomizer}.
...
...
@@ -46,8 +51,12 @@ class WebTestClientContextCustomizerIntegrationTests {
@Autowired
private
WebTestClient
webTestClient
;
@Autowired
private
WebTestClientBuilderCustomizer
clientBuilderCustomizer
;
@Test
void
test
()
{
verify
(
this
.
clientBuilderCustomizer
).
customize
(
any
(
Builder
.
class
));
this
.
webTestClient
.
get
().
uri
(
"/"
).
exchange
().
expectBody
(
String
.
class
).
isEqualTo
(
"hello"
);
}
...
...
@@ -60,6 +69,11 @@ class WebTestClientContextCustomizerIntegrationTests {
return
new
TomcatReactiveWebServerFactory
(
0
);
}
@Bean
WebTestClientBuilderCustomizer
clientBuilderCustomizer
()
{
return
mock
(
WebTestClientBuilderCustomizer
.
class
);
}
}
static
class
TestHandler
implements
HttpHandler
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment