Spring Boot TestRestTemplate教程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/neweastsun/article/details/100750909

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包装器。

猜你喜欢

转载自blog.csdn.net/neweastsun/article/details/100750909
今日推荐