Skip to main content
 首页 » 编程设计

Spring Boot TestRestTemplate教程

2022年07月19日117yxwkf

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