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

目录
  • 使用RestTemplate和Junit单元测试的注意事项
    • springboot中的单元测试
  • MockMVC和TestRestTemplate的使用与对比
    • MockMVC
    • RestTemlate

使用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。

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

(0)

相关推荐

  • Spring Boot通过Junit实现单元测试过程解析

    这篇文章主要介绍了Spring Boot通过Junit实现单元测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.需要在pom.xml中引入spring-boot-starter-test <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifa

  • 详解Spring Boot Junit单元测试

    Junit这种老技术,现在又拿出来说,不为别的,某种程度上来说,更是为了要说明它在项目中的重要性. 凭本人的感觉和经验来说,在项目中完全按标准都写Junit用例覆盖大部分业务代码的,应该不会超过一半. 刚好前段时间写了一些关于SpringBoot的帖子,正好现在把Junit再拿出来从几个方面再说一下,也算是给一些新手参考了. 那么先简单说一下为什么要写测试用例 1. 可以避免测试点的遗漏,为了更好的进行测试,可以提高测试效率 2. 可以自动测试,可以在项目打包前进行测试校验 3. 可以及时发现因

  • Spring Boot 单元测试JUnit的实践

    一.介绍 JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试. <!--more--> 白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人 员是公开的: 回归测试:软件或环境修复或更正后的再测试: 单元测试:最小粒度的测试,以测试某个功能或代码块.一般由程序员来做,因为它需要知道内部程序设计和编码的细节: JUnit GitHub地址:ht

  • SpringBoot 单元测试JUnit的使用详解

    一.简介 JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试. 白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人 员是公开的: 回归测试:软件或环境修复或更正后的再测试: 单元测试:最小粒度的测试,以测试某个功能或代码块.一般由程序员来做,因为它需要知道内部程序设计和编码的细节: 二.JUnit使用 1.pom.xml中添加JUnit依赖.

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

    目录 使用RestTemplate和Junit单元测试的注意事项 springboot中的单元测试 MockMVC和TestRestTemplate的使用与对比 MockMVC RestTemlate 使用RestTemplate和Junit单元测试的注意事项 对于之前写单元测试注入的的service,这样单元测试也可以跑通. springboot中的单元测试 但是如果现在送RestTemplate,代码如下: 运行单元测试会报如下错误:(拒绝连接) 总结使用RestTemplate运行单元测试

  • Spring项目中使用Junit单元测试并配置数据源的操作

    目录 Spring 使用Junit单元测试并配置数据源 一.问题描述 二.解决方案 Spring 数据库依赖 单元测试的一点想法 一点想法: 这里面有这样一些问题: Spring 使用Junit单元测试并配置数据源 一.问题描述 由于公司项目中的数据源是配置在Tomcat中的server.xml中的,所以在使用Junit进行单元测试的时候,无法获取数据源. 二.解决方案 由于项目集成了Spring的自动注入等功能,所以在使用Junit进行单元测试的时候需要保证Spring的配置文件都能被加载,同

  • Spring MVC全局异常处理和单元测试_动力节点Java学院整理

    在spring MVC的配置文件中: <!-- 总错误处理--> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView"> <value>/error/error</

  • Java Spring Boot实战练习之单元测试篇

        一.关于JUnit的一些东西   在我们开发Web应用时,经常会直接去观察结果进行测试.虽然也是一种方式,但是并不严谨.作为开发者编写测试代码来测试自己所写的业务逻辑是,以提高代码的质量.降低错误方法的概率以及进行性能测试等.经常作为开发这写的最多就是单元测试.引入spring-boot-starter-testSpringBoot的测试依赖.该依赖会引入JUnit的测试包,也是我们用的做多的单元测试包.而Spring Boot在此基础上做了很多增强,支持很多方面的测试,例如JPA,Mo

  • 使用spring的restTemplate注意点

    目录 使用spring的restTemplate注意点 下面看spring的RestTemplate的源码 spring的RestTemplate使用指南 一:restTemplate简介 二:restTemplate的配置方法 三:restUtil工具类 四:使用示例 五:总结 使用spring的restTemplate注意点 spring的restTemplate可以向一个url发送请求并接收服务器端的响应信息.但在发请求时,会对请求的url值进行编码再发送. 下面看spring的RestT

  • JUnit单元测试入门必看篇

    什么是单元测试 写了个类,要给别人用,会不会有bug?怎么办?测试一下. 用main方法测试好不好?不好! 不能一起运行! 大多数情况下需要人为的观察输出确定是否正确 为什么要进行单元测试 重用测试,应付将来的实现的变化. 提高士气,明确知道我的东西是没问题的. JUnit4 HelloWorld 需要导入JUnit和hamcrest包 new project 建立类 建立testcase assertThat 使用hamcrest的匹配方法 放弃旧的断言,使用hamcrest断言 a)   a

  • Spring使用RestTemplate模拟form提交示例

    RestTemplate是用来在客户端访问Web服务的类.和其他的Spring中的模板类(如JdbcTemplate.JmsTemplate)很相似,我们还可以通过提供回调方法和配置HttpMessageConverter类来客户化该模板.客户端的操作可以完全使用RestTemplate和HttpMessageConveter类来执行. 1.声明RestTemplate的bean @Bean public RestTemplate restTemplate(){ return new RestT

  • Spring Boot RestTemplate提交表单数据的三种方法

    在REST接口的设计中,利用RestTemplate进行接口测试是种常见的方法,但在使用过程中,由于其方法参数众多,很多同学又混淆了表单提交与Payload提交方式的差别,而且接口设计与传统的浏览器使用的提交方式又有差异,经常出现各种各样的错误,如405错误,或者根本就得不到提交的数据,错误样例如下: Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 405 Metho

  • 解决java junit单元测试@Test报错的问题

    在我们在myeclips里使用junit测试工具时有时会遇到错误,这是什么原因呢? 导致问题的原因通常有下面几个: (1)没有导入jar包 (2)导入jar包版本太低 (3)注意@Test要写在方法上面 如果不是几种问题,那便试试下面的解决方案: 1.在项目上点击右键,出现下图内容,选择properties 2.出现如下对话框,点击java build path,再选择add Library 3.之后如下图操作 4.选择junit4,点击finish,配置完毕. 以上这篇解决java junit

  • Spring cloud restTemplate 传递复杂参数的方式(多个对象)

    使用微服务的时候往往服务之间调用比较麻烦,spring cloud提供了Feign接口调用,RestTemplate调用的方式 这里我探讨下RestTemplate调用的方式: 服务A:接收三个对象参数  这三个参数的是通过数据库查询出来的 服务B:要调用服务A 服务B提供了查询三个参数的方法,后面要使用三个参数 对于服务A,处理的方式有两中 1. 服务B提供一个Feign接口将查询三个参数的方法公开,服务A直接引用Feign来查询参数,服务B只需要将三个查询关键字传递过去即可 服务A acti

随机推荐