Spring Boot TestRestTemplate教程
本文介绍 Spring Boot TestRestTemplate。建议阅读之前先阅读RestTemplate简明教程,TestRestTemplate可认为是RestTemplate有吸引力的替代方案。
1. maven依赖
使用TestRestTemplate之前需要加入相应依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
2. TestRestTemplate 和 RestTemplate
两者都适合写集成测试,很好地与HTTP API进行交互。举例,提供我们与HTTP方法一致的API,请求头以及其他http相关内容。在RestTemplate简明教程中已经介绍了相关方法的应用。
下面是简单GET请求示例:
TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.
getForEntity(FOO_RESOURCE_URL + "/1", String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
尽管两个类非常相似,TestRestTemplate并未继承RestTemplate,但提供了一些非常令人兴奋的新特性。
3.TestRestTemplate新特性
3.1. 使用Base认证凭证构造器
TestRestTemplate提供了构造函数,使用基本认证方式进行构造TestRestTemplate实例。所有使用该实例执行请求都将使用相应凭证进行认证:
TestRestTemplate testRestTemplate = new TestRestTemplate("user", "passwd");
ResponseEntity<String> response = testRestTemplate.getForEntity(URL_SECURED_BY_AUTHENTICATION, String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
3.2. 使用HttpClientOption构造器
TestRestTemplate 让我们可以通过HttpClientOption自定义底层的Apache HTTP client HttpClientOption枚举内容包括: ENABLE_COOKIES, ENABLE_REDIRECTS, SSL。请看示例:
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);
3.3. 新的方法
不仅使用构造器根据凭证创建TestRestTemplate实例,也可以在实例创建之后指定凭证。通过withBasicAuth() 方法可以给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));
4. 同时使用TestRestTemplate 和 RestTemplate
TestRestTemplate可作为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));
5. 总结
TestRestTemplate不是对 RestTemplate扩展, 而是为了简化集成测试以及测试中实现认证的更好替代。提供了自定义Apache HTTP Client功能,还可用作RestTemplate包装器。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/100750909