Spring使用RestTemplate和Junit单元测试的注意事项

 更新时间:2021年10月28日 09:44:41   作者:盲目的拾荒者  
这篇文章主要介绍了Spring使用RestTemplate和Junit单元测试的注意事项,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用RestTemplate和Junit单元测试的注意事项

对于之前写单元测试注入的的service,这样单元测试也可以跑通。

springboot中的单元测试

但是如果现在送RestTemplate,代码如下:

运行单元测试会报如下错误:(拒绝连接)

总结使用RestTemplate运行单元测试,不同之前的单元测试。在运行之前必须先把项目跑起来,在运行单元测试。

运行springboot项目,然后运行单元测试RestTemplate结果就正常了。

MockMVC和TestRestTemplate的使用与对比

MockMVC和TestRestTemplate都是测试RestFul接口的测试工具,TestRestTemplate可以用WebTestClient代替

MockMVC

MockMVC是模拟出一个SpringMVC的运行环境,并没有真正地运行一个完整的Servlet容器。

使用方法

在测试类上加入@AutoConfigureMockMvc,然后依赖注入MockMvc对象即可。

特点

1、支持测试时数据的回滚,这适用于测试一个涉及修改数据库数据的方法

2、由于MockMVC并没有真正的启动一个完整的server服务,故当要测试一些抛出可检异常并会返回error page(4开头的状态码),因为error page是由Servlet container提供的,所以MockMVC无法测试这些方法,他还是会返回200状态码。

RestTemlate

RestTemplate就是启动一个完整的server。

使用方法

在@SpringBootTest注解上设置webEnvironment属性为WebEnvironment.RANDOM_PORT或WebEnvironment.DEFINED_PORT即可

// An highlighted block
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class RandomPortTestRestTemplateExampleTests {
    @Test
    void exampleTest(@Autowired TestRestTemplate restTemplate) {
        String body = restTemplate.getForObject("/", String.class);
        assertThat(body).isEqualTo("Hello World");
    }
}

特点

1、不支持回滚,因为运行测试方法和server服务不在同一个线程,所以无法控制server服务。

2、可以测试会抛出可检异常的方法。

3、TestRestTemplate目前不支持测试Patch类型的Http请求,可以用TestWebClient代替。

4、可以将返回结果反序列化为特定的对象,MockMVC无法做到,只能将返回的Json数据转化为String。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现合并word文档的示例代码

    Java实现合并word文档的示例代码

    在做项目中,经常会遇到一种情况,需要将一个小word文档的内容插入到一个大word(主文档)中。本文就为大家准备了Java实现合并word文档的方法,需要的可以参考一下
    2022-08-08
  • Maven项目改为spring boot项目的方法图解

    Maven项目改为spring boot项目的方法图解

    这篇文章主要介绍了Maven项目改为spring boot项目的方法图解 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • Java使用Hutool+自定义注解实现数据脱敏

    Java使用Hutool+自定义注解实现数据脱敏

    我们在使用手机银行的时候经常能看到APP上会将银行卡的卡号中间部分给隐藏掉使用 ***** 来代替,在某些网站上查看一些业务密码时(例如签到密码等)也会使用 ***** 来隐藏掉真正的密码,那么这种方式是如何实现的呢,本文将给大家介绍使用Hutool+自定义注解实现数据脱敏
    2023-09-09
  • Java中线程的等待与唤醒_动力节点Java学院整理

    Java中线程的等待与唤醒_动力节点Java学院整理

    在Object.java中,定义了wait(), notify()和notifyAll()等接口。wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。下面通过本文给大家介绍Java中线程的等待与唤醒知识,感兴趣的朋友一起看看吧
    2017-05-05
  • IDEA中WebService生成Java代码并调用外部接口实现代码

    IDEA中WebService生成Java代码并调用外部接口实现代码

    这篇文章主要介绍了IDEA中WebService生成Java代码并调用外部接口实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Java 中分形图的几种方法详解

    Java 中分形图的几种方法详解

    这篇文章主要介绍了Java 中几种分形的方法详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • 使用Log4j为项目配置日志输出应用详解以及示例演示的实现分析

    使用Log4j为项目配置日志输出应用详解以及示例演示的实现分析

    本篇文章是对Log4j为项目配置日志输出应用详解以及示例演示的实现进行了分析介绍,需要的朋友参考下
    2013-05-05
  • SpringBoot集成SpringSecurity和JWT做登陆鉴权的实现

    SpringBoot集成SpringSecurity和JWT做登陆鉴权的实现

    这篇文章主要介绍了SpringBoot集成SpringSecurity和JWT做登陆鉴权的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • mybatis如何返回某列的最大值

    mybatis如何返回某列的最大值

    这篇文章主要介绍了mybatis如何返回某列的最大值操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 深入了解Java设计模式之UML类图

    深入了解Java设计模式之UML类图

    UML 即 Unified Modeling Language 统一建模语言,是用来设计软件的可视化建模语言。本文就带大家了解一下UML中类图的定义与使用,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-11-11

最新评论