Configure a RestClient.Builder with RestClientTest
This commit adds support for configuring a `RestClient.Builder` and `MockRestServiceServer` support for the `RestClient` when using `@RestClientTest` sliced tests. Closes gh-37033
This commit is contained in:
@@ -735,17 +735,21 @@ include::code:server/MyDataLdapTests[]
|
||||
[[features.testing.spring-boot-applications.autoconfigured-rest-client]]
|
||||
==== Auto-configured REST Clients
|
||||
You can use the `@RestClientTest` annotation to test REST clients.
|
||||
By default, it auto-configures Jackson, GSON, and Jsonb support, configures a `RestTemplateBuilder`, and adds support for `MockRestServiceServer`.
|
||||
By default, it auto-configures Jackson, GSON, and Jsonb support, configures a `RestTemplateBuilder` and a `RestClient.Builder`, and adds support for `MockRestServiceServer`.
|
||||
Regular `@Component` and `@ConfigurationProperties` beans are not scanned when the `@RestClientTest` annotation is used.
|
||||
`@EnableConfigurationProperties` can be used to include `@ConfigurationProperties` beans.
|
||||
|
||||
TIP: A list of the auto-configuration settings that are enabled by `@RestClientTest` can be <<test-auto-configuration#appendix.test-auto-configuration,found in the appendix>>.
|
||||
|
||||
The specific beans that you want to test should be specified by using the `value` or `components` attribute of `@RestClientTest`, as shown in the following example:
|
||||
The specific beans that you want to test should be specified by using the `value` or `components` attribute of `@RestClientTest`.
|
||||
|
||||
include::code:MyRestClientTests[]
|
||||
When using a `RestTemplateBuilder` in the beans under test and `RestTemplateBuilder.rootUri(String rootUri)` has been called when building the `RestTemplate`, then the root URI should be omitted from the `MockRestServiceServer` expectations as shown in the following example:
|
||||
|
||||
include::code:MyRestTemplateServiceTests[]
|
||||
|
||||
When using a `RestClient.Builder` in the beans under test, or when using a `RestTemplateBuilder` without calling `rootUri(String rootURI)`, the full URI must be used in the `MockRestServiceServer` expectations as shown in the following example:
|
||||
|
||||
include::code:MyRestClientServiceTests[]
|
||||
|
||||
[[features.testing.spring-boot-applications.autoconfigured-spring-restdocs]]
|
||||
==== Auto-configured Spring REST Docs Tests
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 2012-2023 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.docs.features.testing.springbootapplications.autoconfiguredrestclient;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.client.RestClientTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.client.MockRestServiceServer;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
|
||||
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
|
||||
|
||||
@RestClientTest(RemoteVehicleDetailsService.class)
|
||||
class MyRestClientServiceTests {
|
||||
|
||||
@Autowired
|
||||
private RemoteVehicleDetailsService service;
|
||||
|
||||
@Autowired
|
||||
private MockRestServiceServer server;
|
||||
|
||||
@Test
|
||||
void getVehicleDetailsWhenResultIsSuccessShouldReturnDetails() {
|
||||
this.server.expect(requestTo("https://example.com/greet/details"))
|
||||
.andRespond(withSuccess("hello", MediaType.TEXT_PLAIN));
|
||||
String greeting = this.service.callRestService();
|
||||
assertThat(greeting).isEqualTo("hello");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2022 the original author or authors.
|
||||
* Copyright 2012-2023 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.
|
||||
@@ -28,7 +28,7 @@ import static org.springframework.test.web.client.match.MockRestRequestMatchers.
|
||||
import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess;
|
||||
|
||||
@RestClientTest(RemoteVehicleDetailsService.class)
|
||||
class MyRestClientTests {
|
||||
class MyRestTemplateServiceTests {
|
||||
|
||||
@Autowired
|
||||
private RemoteVehicleDetailsService service;
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2012-2023 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.docs.features.testing.springbootapplications.autoconfiguredrestclient
|
||||
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.boot.test.autoconfigure.web.client.RestClientTest
|
||||
import org.springframework.http.MediaType
|
||||
import org.springframework.test.web.client.MockRestServiceServer
|
||||
import org.springframework.test.web.client.match.MockRestRequestMatchers
|
||||
import org.springframework.test.web.client.response.MockRestResponseCreators
|
||||
|
||||
@RestClientTest(RemoteVehicleDetailsService::class)
|
||||
class MyRestClientServiceTests(
|
||||
@Autowired val service: RemoteVehicleDetailsService,
|
||||
@Autowired val server: MockRestServiceServer) {
|
||||
|
||||
@Test
|
||||
fun getVehicleDetailsWhenResultIsSuccessShouldReturnDetails(): Unit {
|
||||
server.expect(MockRestRequestMatchers.requestTo("https://example.com/greet/details"))
|
||||
.andRespond(MockRestResponseCreators.withSuccess("hello", MediaType.TEXT_PLAIN))
|
||||
val greeting = service.callRestService()
|
||||
assertThat(greeting).isEqualTo("hello")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2022 the original author or authors.
|
||||
* Copyright 2012-2023 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.
|
||||
@@ -26,7 +26,7 @@ import org.springframework.test.web.client.match.MockRestRequestMatchers
|
||||
import org.springframework.test.web.client.response.MockRestResponseCreators
|
||||
|
||||
@RestClientTest(RemoteVehicleDetailsService::class)
|
||||
class MyRestClientTests(
|
||||
class MyRestTemplateServiceTests(
|
||||
@Autowired val service: RemoteVehicleDetailsService,
|
||||
@Autowired val server: MockRestServiceServer) {
|
||||
|
||||
Reference in New Issue
Block a user