专栏首页程序那些事Spring Boot的TestRestTemplate使用

Spring Boot的TestRestTemplate使用

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的博客

本文分享自微信公众号 - 程序那些事(flydean-tech),作者:flydean

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JDK10的新特性:var泛型和多个接口实现

    在JDK10的新特性:本地变量类型var中我们讲到了为什么使用var和怎么使用var。

    程序那些事
  • 深入理解HashMap和LinkedHashMap的区别

    我们知道HashMap的变量顺序是不可预测的,这意味着便利的输出顺序并不一定和HashMap的插入顺序是一致的。这个特性通常会对我们的工作造成一定的困扰。为了实...

    程序那些事
  • Libra教程之:Libra协议的关键概念

    Libra协议是Libra区块链的基础,本文主要讲解Libra协议的一些关键概念。

    程序那些事
  • Android Volley 源码解析(三),图片加载的实现

    在上一篇文章中,我们一起深入探究了 Volley 的缓存机制,通过源码分析对缓存的工作原理进行了了解,这篇文章将带大家一起探究「Volley 图片加载的实现」,...

    developerHaoz
  • 血浆抗体再次验证有效!新冠肺炎康复者血浆制品投入危重病人救治,捐献号召一呼百应

    从事疫苗和血液制品研究生产的超级大厂——中国生物宣布,新冠肺炎康复者血浆中已检出高效价病毒中和抗体,灭活处理后,制备出的新冠病毒特免血浆制品,已经拯救了11名危...

    量子位
  • systemd-journald日志持久化的操作方法

    版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

    耕耘实录
  • select自定义小三角样式

    这段代码是网上大部分的解决办法,在这里总结一下: 让select透明,上面加一个span,来替换select框,可以自定义小三角样式,也可以做出select文字...

    蓓蕾心晴
  • JavaBean是什么

    Java Bean 实际是就是一个普通的 Java Class,但是需要满足三个要求 1、所有属性为 private,只允许通过getter方法和setter...

    赵哥窟
  • NVIDIA ECCV18论文:超像素采样网络助力语义分割与光流估计(代码将开源)

    计算机视觉中超像素指具有相似纹理、颜色、亮度等特征的相邻像素构成的具有一定视觉意义的不规则像素块。它利用像素之间特征的相似性将像素分组,用少量的超像素代替大量的...

    CV君
  • Q28 Implement strStr()

    Implement strStr(). Return the index of the first occurrence of needle in haysta...

    echobingo

扫码关注云+社区

领取腾讯云代金券