SpringBoot请求发送与信息响应匹配实现方法介绍
作者:执久呀 发布时间:2021-07-08 22:05:27
标签:SpringBoot,发送请求,匹配,响应信息
发送虚拟请求访问controller
我们在test类中虚拟访问controller,就得发送虚拟请求。
先创建一个controller
package com.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/tests")
public class TestController {
@GetMapping
public String test(){
System.out.println("test is running");
return "test is success";
}
}
在test中 ,这个是一个get请求,所以我们调用get,如果是put,则调用put即可
package com;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//开启虚拟MVC调用
@AutoConfigureMockMvc
public class WebTest {
@Test
// 注入虚拟MVC调用对象
public void test(@Autowired MockMvc mvc) throws Exception {
//创建虚拟请求,当前访问/tests,MockMvcRequestBuilders是一个工具类
MockHttpServletRequestBuilder builder= MockMvcRequestBuilders.get("/tests");
//执行请求
mvc.perform(builder);
}
}
访问需要用到的一个RequestBuilder,我们按ctrl+h显示出它的实现类
运行结果
打印出了结果,说明访问成功
匹配响应执行状态
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//开启虚拟MVC调用
@AutoConfigureMockMvc
public class WebTest {
@Test
// 注入虚拟MVC调用对象
public void test(@Autowired MockMvc mvc) throws Exception {
//创建虚拟请求,当前访问/tests,MockMvcRequestBuilders是一个工具类
MockHttpServletRequestBuilder builder= MockMvcRequestBuilders.get("/tests");
// 执行请求
ResultActions action = mvc.perform(builder);
//设置预期值与真实值进行比较,成功则测试通过,失败则测试不通过
//定义本次调用的预期值
StatusResultMatchers status= MockMvcResultMatchers.status();
//预计本次调用成功的状态为200
ResultMatcher ok=status.isOk();
//添加预计值到本次调用过程中进行匹配
action.andExpect(ok);
}
}
运行成功不会有任何反应
当将get改为put制造一个错误,或修改不存在的路径等其他错误,则就会报出错误信息。
匹配响应体
虚拟请求体匹配
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//开启虚拟MVC调用
@AutoConfigureMockMvc
public class WebTest {
@Test
// 注入虚拟MVC调用对象
public void testBody(@Autowired MockMvc mvc) throws Exception {
//创建虚拟请求,当前访问/tests,MockMvcRequestBuilders是一个工具类
MockHttpServletRequestBuilder builder= MockMvcRequestBuilders.get("/tests");
// 执行请求
ResultActions action = mvc.perform(builder);
//设置预期值与真实值进行比较,成功则测试通过,失败则测试不通过
//定义本次调用的预期值
ContentResultMatchers content = MockMvcResultMatchers.content();
//预计本次调用成功的状态为200
ResultMatcher result= content.string("test is success1");
//添加预计值到本次调用过程中进行匹配
action.andExpect(result);
}
}
如果一致则不会有任何错误信息出现, 若信息不一致,则会出现
匹配json格式响应体
先创建一个类pojo对象
package com.pojo;
import lombok.Data;
@Data
public class Person {
private String name;
private String age;
private String detail;
}
controller下
package com.controller;
import com.pojo.Person;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/tests")
public class TestController {
@RequestMapping("/person")
public Person testPerson(){
Person person = new Person();
person.setName("zhangsan");
person.setAge("14");
person.setDetail("xijie");
return person;
}
}
启动访问得到一组json数据
我们在测试类中修改一个,使他产生错误的信息
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//开启虚拟MVC调用
@AutoConfigureMockMvc
public class WebTest
@Test
// 注入虚拟MVC调用对象
public void testJson(@Autowired MockMvc mvc) throws Exception {
//创建虚拟请求,当前访问/tests,MockMvcRequestBuilders是一个工具类
MockHttpServletRequestBuilder builder= MockMvcRequestBuilders.get("/tests/person");
// 执行请求
ResultActions action = mvc.perform(builder);
ContentResultMatchers content = MockMvcResultMatchers.content();
ResultMatcher result= content.json("{\"name\":\"zhangsan\",\"age\":\"14\",\"detail\":\"xijie1\"}");
//添加预计值到本次调用过程中进行匹配
action.andExpect(result);
}
}
运行结果
匹配响应头
@Test
// 注入虚拟MVC调用对象
public void testHeader(@Autowired MockMvc mvc) throws Exception {
MockHttpServletRequestBuilder builder= MockMvcRequestBuilders.get("/tests");
ResultActions action = mvc.perform(builder);
HeaderResultMatchers header = MockMvcResultMatchers.header();
ResultMatcher result = header.string("Content-Type", "application/json");
//添加预计值到本次调用过程中进行匹配
action.andExpect(result);
}
匹配了一个/tests,返回字符串的方法。,就可以看出它的差别了
@RestController
@RequestMapping("/tests")
public class TestController {
@GetMapping
public String test(){
System.out.println("test is running");
return "test is success";
}
}
一般的做法都是将这些写在同一方法。
来源:https://blog.csdn.net/weixin_60719453/article/details/127388893


猜你喜欢
- JACOB的方法,足可以解决这个问题,但是我既然以前曾经做过报表,就想尝试不同的方法。JACOB是一座连接JAVA和微软的桥,所有的解析由微
- 相对布局要比前面讲的线性布局和表格布局要灵活一些,所以平常用得也是比较多的。相对布局控件的位置是与其周围控件的位置相关的,从名字可以看出来,
- 前言Elasticsearch是一个非常流行的搜索引擎,已经成为了许多企业的首选解决方案。然而,我们要想成为一个优秀的程序员,就必须掌握各种
- 废话不多说了,直接给大家贴代码了。具体代码如下所示:using System;using System.Collections.Generi
- IOS与网页JS交互随着移动APP的快速迭代开发趋势,越来越多的APP中嵌入了html网页,但在一些大中型APP中,尤其是电商类
- 什么是AOPAOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented P
- 概要:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性
- 一个应用场景,浏览器上传一个文件,此文件后台调用文件转换,需要耗费相当长的时间,这样,如果是一个线程同步式的做下去,那么用户在浏览器上感觉就
- 1:gc日志输出在jvm启动参数中加入 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimes
- java Hibernate多对多映射前言:一、单向多对多 单向多对多的例子用人和职位来举例,一个人可以有多个职位
- 本文实例讲述了C#推送信息到APNs的方法。分享给大家供大家参考。具体实现方法如下:class Program{ public
- 本文实例讲述了C#使用iTextSharp将PDF转成文本的方法。分享给大家供大家参考。具体实现方法如下:using System;usin
- 代码如下:try { // 创建一个线程 Thread thread = new Thread() {
- 博主在初学注解的时候看到网上的介绍大部分都是直接介绍用法或者功能,没有实际的应用场景,篇幅又很长导致学习的时候难以理解其意图,而且学完就忘Q
- 实例如下:XSSFilter.javapublic void doFilter(ServletRequest servletrequest,
- 图片解析:1.生成字节码文件的过程可能产生编译时异常(checked),由字节码文件到在内存中加载、运行类此过程可能产生运行时异常(unch
- 本文将介绍一段实例代码,来讲解利用正则表达式使C#判断输入日期格式是否正确的方法。希望这段代码能对大家有所帮助。 通常我们在用C#
- 本人是用易语言起步的,起初是为了兴趣,后来由于易语言被杀软误杀严重,连空白程序都杀,后来转到了学C#,随着学习的深入,接触越来越复杂的东西之
- @schedule 注解 是springboot 常用的定时任务注解,使用起来简单方便,但是如果定时任务非常多,或者有的任务很耗时
- mybatis-plus-generator + clickhouse 自动生成代码依赖<!--> mybatis-plus &