文章目錄
Spring Boot的TestRestTemplate使用
TestRestTemplate和RestTemplate很類似,不過它是專門用在測試環境中的,本文我們將會講述TestRestTemplate的一些常用方法。
如果我們在測試環境中使用@SpringBootTest,則可以直接使用TestRestTemplate。
添加maven依賴
要使用TestRestTemplate,我們需要首先添加如下的maven依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
TestRestTemplate VS RestTemplate
TestRestTemplate和RestTemplate的功能很類似,都可以用來和HTTP API進行交互。實際上TestRestTemplate就是RestTemplate的封裝。 我們看下TestRestTemplate的代碼:
public class TestRestTemplate {
private final RestTemplateBuilder builder;
private final HttpClientOption[] httpClientOptions;
private final RestTemplate restTemplate;
...
public void setUriTemplateHandler(UriTemplateHandler handler) {
this.restTemplate.setUriTemplateHandler(handler);
}
...
以setUriTemplateHandler為例,我們看到實際上TestRestTemplate調用了restTemplate里面的具體方法。
我們看一下TestRestTemplate基本的使用:
@Test
public void testGet (){
TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.
getForEntity(FOO_RESOURCE_URL + "/1", String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
}
使用Basic Auth Credentials
TestRestTemplate封裝了基本的Auth Credentials,我們可以這樣使用:
TestRestTemplate testRestTemplate
= new TestRestTemplate("user", "passwd");
ResponseEntity<String> response = testRestTemplate.
getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
使用HttpClientOption
HttpClientOption提供了如下幾個選項:ENABLE_COOKIES, ENABLE_REDIRECTS, 和 SSL。
我們看下TestRestTemplate怎么使用:
TestRestTemplate testRestTemplate = new TestRestTemplate("user",
"passwd", TestRestTemplate.HttpClientOption.ENABLE_COOKIES);
ResponseEntity<String> response = testRestTemplate.
getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
如果我們不需要認證,則可以這樣使用:
TestRestTemplate(TestRestTemplate.HttpClientOption.ENABLE_COOKIES)
我們也可以在創建TestRestTemplate之后添加認證:
TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.withBasicAuth(
"user", "passwd").getForEntity(URL_SECURED_BY_AUTHENTICATION,
String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
使用RestTemplateBuilder
RestTemplateBuilder為我們提供了自定義RestTemplate的機會,我們可以使用它來對RestTemplate進行封裝:
RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
restTemplateBuilder.configure(restTemplate);
TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplateBuilder);
ResponseEntity<String> response = testRestTemplate.getForEntity(
FOO_RESOURCE_URL + "/1", String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
本文的例子可以參考https://github.com/ddean2009/learn-springboot2/tree/master/springboot-testRestTemplate
更多教程請參考 flydean的博客