目录

1. 设置测试类注解

2. 模拟请求

3. 模拟上传文件及对象

4. 传对象

5. 解析json

6. 注意事项


1. 设置测试类注解

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Slf4j
@AutoConfigureMockMvc
public class MyTest {}

2. 模拟请求

        String jsonString = mockMvc.perform(MockMvcRequestBuilders.multipart("/test/save").param("code", "hello").param("type", "1").header(LOGIN_HEADER_KEY, LOGIN_HEADER_VALUE)).andExpect(status().isOk()).andReturn().getResponse().getContentAsString();JSONObject jsonObject = JSONObject.parseObject(jsonString);

使用阿里的fastjson去解析即可。

3. 模拟上传文件及对象

        MockMultipartFile file = new MockMultipartFile("file", "文件名称.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", new FileInputStream(new File(CommonConstant.FILE_PATH)));String jsonString = mockMvc.perform(MockMvcRequestBuilders.multipart("/test/import").file(file).param("myParam", "test").param("importType", "1").header(LOGIN_HEADER_KEY, LOGIN_HEADER_VALUE).andExpect(status().isOk()).andReturn().getResponse().getContentAsString();JSONObject jsonObject = JSONObject.parseObject(jsonString);

实际上,传对象,只需要传对象的各个字段即可,SpringMVC会自动将字段封装成一个对象,所以也不需要将对象转为json再传给后端的骚操作(因为我试了传文件同时传对象会没用。。)

4. 传对象

当然,如果只是传个对象,没必要加那么多.param,可以用json啦

        Person person = new Person();person.setName("张三");//String jsonString = mockMvc.perform(MockMvcRequestBuilders.post("/test").content(JSONObject.toJSONString(person)).header(LOGIN_HEADER_KEY, LOGIN_HEADER_VALUE)).andExpect(status().isOk()).andReturn().getResponse().getContentAsString();JSONObject jsonObject = JSONObject.parseObject(jsonString);

这样做,也就可以传null过去的,当然直接.param传个null是不会给你过的。

        String requestBody = "{\"request\":null}";String jsonString = mockMvc.perform(MockMvcRequestBuilders.post("/test").content(requestBody)。。。

5. 解析json

通常对返回的json进行处理,可以用到如下操作:

{"code": 200,"data": {"hasNext": true,"list": [{"productNo": "123456789","id": 1,"name": "xxx"}],"pageNum": 1,"pageSize": 10},"message": "操作成功","timestamp": 1611111111111
}

Integer id = (Integer)((JSONObject)((JSONObject)jsonObject.get("data")).getJSONArray("list").get(0)).get("id");

主要便是利用get方法将获取到的对象强转为JSONObject,套娃。当然你傻到用字符串正则获取,也没得说。

6. 注意事项

还是需要强调下,测试嘛,增加了记录就后面跟着删除该记录,养成好习惯。来去无踪,才是好测试

【Spring Boot】使用mockMvc模拟请求以及遇到的问题相关推荐

  1. Spring Boot中扩展XML请求和响应的支持

    在Spring Boot中,我们大多时候都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一 ...

  2. Spring Boot + Redis:模拟 10w 人的秒杀抢单!

    作者 | 神牛003 来源 | www.cnblogs.com/wangrudong003/p/10627539.html 本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面 ...

  3. spring boot中 使用http请求

    因为项目需求,需要两个系统之间进行通信,经过一番调研,决定使用http请求. 服务端没有什么好说的,本来就是使用web 页面进行访问的,所以spring boot启动后,controller层的接口就 ...

  4. Spring Boot中表格的请求以及表格界面的显示

    目录 理论 演示及源码 理论 后端通过@GetMapping获取数据,把数据存储在Model中,前端使用模板引擎机进行获取即可. 在@GetMapping中填写请求信息: Model再通过addAtt ...

  5. MockMvc 模拟请求

    接口写好了,可以用单元测试.使用注解,返回统一数据格式 这里面是用postman来操作的, 如果还是要单元测试呢?   这时候可以用到MockMvc 代码: @RunWith(SpringRunner ...

  6. Spring Boot之发送HTTP请求(RestTemplate详解)

    RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法 1.简述RestTemplate RestTemplate能 ...

  7. 使用PostMan工具测试spring boot接口的若干请求参数形式

    不同接收请求参数的方式: 1.使用raw发送参数 形式1: @RequestBody User user接收属性,自动封装到user对象中 形式2 @RequestBody Map<String ...

  8. Spring Boot 2.x基础教程:JSR-303实现请求参数校验

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/spring-boot-learni ...

  9. Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应

    在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...

最新文章

  1. 学AI哪家强?清华全球第1,Top5中有这3所中国高校
  2. ACL 2020 | 腾讯AI Lab解读三大前沿方向及入选的20篇论文
  3. 第一篇,试试功能如何
  4. Python线程、进程知识整理
  5. 1000层的Transformer,诞生了!
  6. 客户端能不等四次挥手就强制关闭 TCP 连接吗?
  7. Jenkins学习三:介绍一些Jenkins的常用功能
  8. 老罗Android开发视频教程
  9. 计算机网络第二章学习通题目及答案
  10. Go语言: go-redis客户端通过MSet方法一次性批量写入多个key的值
  11. 苹果 watchOS 3.2 首个测试版:剧场模式、SiriKit
  12. MySQL——Student、Course、Teacher、SC SQL查询练习题
  13. Aspose.Words 复制表格并将复制的表格插入原有表格后面
  14. 印象笔记、为知笔记、有道云笔记使用比较
  15. 鹅厂前员工稍微谈谈腾讯
  16. 用Filmage Editor制作视频,赢不限时长录屏神器永久序列码!
  17. ubuntu(linux)打开jnlp文件
  18. 如何用C语言打印爱心图案 /爱心代码的实现
  19. 【虹科案例】极高的精度水平——虹科数字化仪在大型强子对撞机机器保护系统中的应用
  20. 计算机电源5VSB只有3V,研华工控机接上电源后5vsb那颗灯闪烁是怎么回事

热门文章

  1. 服务器系统盘40g是什么,云服务器 40g系统盘
  2. 「UG/NX」BlockUI 枚举Enum
  3. 年终盘点一 | 云原生的 2022 年:降本提效、全面 Serverless 化
  4. java计算机毕业设计教师继续教育MyBatis+系统+LW文档+源码+调试部署
  5. Python中常用最神秘的函数! lambda 函数深度总结!
  6. SSO(single sign on)模式 单点登录
  7. 详解什么是软件企业认定
  8. 网络统考计算机应用基础ppt视频,计算机应用基础课程网络统考辅导.ppt
  9. 程序员常用英语词汇(018)
  10. 数据挖掘#特征工程(二)特征重要性及可解释性总结