SpringBoot MockMVC 的使用

参考:

SpringBoot 使用 MockMvc 测试 Controller

MockMvc 使用教程

简介

通过字面理解 MockMvc 就是模拟的 MVC 环境。

MockMvc 是 Spring 框架中用于测试 Spring MVC 控制器的一个重要工具。它提供了一个强大的 API,使得开发者能够模拟 HTTP 请求并验证响应。

使用步骤

假设已经引入必要的依赖,使用 MockMvc 进行测试大致分为以下几步:

  1. 构建请求对象
  2. 发起请求
  3. 对请求结果进行处理/校验
  4. 获取到请求结果

具体到 API 就是:

  1. 构建 MockMvc 对象
  2. 构建 MockHttpServletRequestBuilder 对象
  3. 调用 MockMvc 对象的 perform(MockHttpServletRequestBuilder) 方法,方法返回 ResultActions
  4. 调用 ResultActions 的处理方法 andDo,进行结果处理(按测试需要执行)
  5. 调用 ResultActions 的验证方法 andExpect,验证请求结果(按测试需要执行)
  6. 调用 ResultActions 的 andReturn 方法获取到 MvcResult

示例

@RunWith(SpringRunner.class)
@SpringBootTest
public class MockMvcTest {// 注入 Web 环境的 ApplicationContext 容器@Autowiredprivate WebApplicationContext context;/*** 模拟 Mvc 测试对象*/private MockMvc mockMvc;/*** 所有测试方法执行之前执行该方法*/@Beforepublic void before() throws Exception {// 获取 MockMvc 对象实例mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build();}@Testpublic void getInfo3() throws Exception {User user = new User();user.setUsername("Jack");user.setPassword("Jack001");String jsonString = JSON.toJSONString(user);MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/mock/test").param("name", "value").cookie(new Cookie("token", "123456")).accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON).header("token", "123456").content(jsonString).accept(MediaType.APPLICATION_JSON);MvcResult mvcResult = mockMvc.perform(requestBuilder).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();System.out.println(mvcResult.getResponse().getContentAsString());}}

MockMvc

  • MockMvc 是服务器端 SpringMVC 测试的主入口点。
  • 通过 MockMVCBuilders 的静态方法去建造 MockMVCBuilder,MockMvc 由 MockMVCBuilder 构造。
  • 核心方法:perform(RequestBuilder rb),执行一个 RequestBuilder 请求,会自动执行 SpringMVC 的流程并映射到相应的控制器执行处理,该方法的返回值是一个 ResultActions。

MockMVCBuilders

  • 负责创建 MockMVCBuilder 对象。
  • 有两种创建方式
    • standaloneSetup(Object... controllers):通过参数指定一组控制器,这样就不需要从上下文获取了。
    • webAppContextSetup(WebApplicationContext wac):指定 WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的 MockMvc。

MockMvcRequestBuilders

  • 用来构建 Request 请求。
  • 其主要有两个子类 MockHttpServletRequestBuilderMockMultipartHttpServletRequestBuilder(如文件上传使用)。
  • 有一些常用的静态方法:
    • get(String url):构建 GET 请求。
    • post(String url):构建 POST 请求。
    • put(String url):构建 PUT 请求。
    • delete(String url):构建 DELETE 请求。

ResultActions

  • andExpect:接收 ResultMatcher 验证规则作为参数,验证控制器执行完成后结果是否正确。
  • andDo:接收 ResultHandler 结果处理器作为参数,比如调试时打印结果到控制台。
  • andReturn:最后返回相应的 MvcResult,然后进行自定义验证/进行下一步的异步处理。
  • MockMvcResultMatchers
    • 用来匹配执行完请求后的结果验证。
    • 如果匹配失败将抛出相应的异常。
    • 包含了很多验证 API 方法。
  • MockMvcResultHandlers
    • 结果处理器,表示要对结果做点什么事情。
    • 比如使用 MockMvcResultHandlers.print() 输出整个响应结果信息。

MvcResult

单元测试执行结果,可以针对执行结果进行自定义验证逻辑。采用断言验证数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/798066.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用笔记来记录遇到的问题:发布版本和非发布版本遇到的问题

这两天接到一个任务,把中秋节的的宣传广告发到app上去。 没想到一个项目运营了这么久,竟然没有这种功能 我给他们做了3个: 开屏广告、首页弹出广告和客服机器人形象换成小兔子。 搞完之后,我发布版本给他们测试 谁知道我本地运行得好好的,为啥发布给他们的版本没有效果! …

在线打字练习网站【巧手打字通】使用教程

巧手打字通是一个专为打字初学者,特别是中小学生量身设计的在线打字练习平台。该平台通过科学、有趣且高效的教学方式,帮助用户快速掌握打字技巧,提升打字速度和准确率。 本文提供了整套的从入门到精通的各类课程简介,包括:认识键盘,科普,入门课程,学拼音,学英语,读诗…

Nuxt Kit 中的上下文处理

title: Nuxt Kit 中的上下文处理 date: 2024/9/16 updated: 2024/9/16 author: cmdragon excerpt: Nuxt Kit 提供的上下文处理工具,尤其是 useNuxt 和 tryUseNuxt,为模块化开发提供了极大的便利。通过这些函数,开发者可以方便地访问 Nuxt 实例,从而更好地管理应用配置。 …

佩戴安全帽 人员聚集识别

佩戴安全帽人员聚集识别借助现场已经安装的监控摄像机实时监控现场画面,识别职工是不是戴安全帽,是不是人员聚集状态,进而发送警示和提醒。佩戴安全帽人员聚集识别系统选用最新神经网络算法和边缘计算,可以代替人的双眼,全自动识别各种各样违规操作如:反光衣穿戴识别、安…

安全帽佩戴检测摄像头

安全帽佩戴检测摄像头借助现场已有的监控摄像头或者专门安装内置算法的监控摄像头,对现场人员安全帽佩戴进行实时识别检测。安全帽佩戴检测摄像头通过RTSP协议访问摄像机视频流,实时获取分析。立即识别视频监控区域未戴安全帽的工人,并实时分析抓拍警报。安全帽佩戴检测摄像…

反光衣穿戴识别系统介绍

反光衣穿戴识别系统依据深度学习+边缘计算视觉分析技术,利用已有的摄像头对现场作业人员穿戴实时分析和识别视频图像数据。不用人工干预,反光衣穿戴识别系统全天候24h不间断对作业现场实时监控,当检测出工人不穿反光衣时,及时抓拍提醒并把违规信息发送给系统后台,反光衣穿…

学校食堂视频监控分析系统

学校食堂视频监控分析系统利旧现场已有的监控摄像头,可以对学校后厨识别监控厨师是否佩戴厨师帽厨师服、有无戴口罩、违规抽烟、陌生人进到后厨以及后厨出现老鼠猫狗等,并及时抓拍预警、后台推送违规图像信息。学校食堂视频监控分析系统智能实时分析产生的违规抓拍、对接并自…

摄像机识别未戴安全帽

摄像机识别未戴安全帽系统利用边缘计算+机器学习与深度学习技术,摄像机识别未戴安全帽系统借助现场部署的监控摄像机RTSP协议访问摄像机视频流,实时获取,实时分析,实时报警,并且抓拍人像分析人员信息、识别是不是戴安全帽、同歩声音报警,将报警信息快照和报警视频存入数据…

秸秆焚烧监控系统

秸秆焚烧监控系统通过现场通信铁塔基站上架设高空高像素监控摄像头,进行周边地域360度全天候24小时不间断实时监控,秸秆焚烧监控系统通过RTSP协议访问摄像机视频流,实时获取抓拍现场视频流画面实时分析,并且自动识别秸秆焚烧行为现象,实时报警并且将违规画面传回监控后台。…

加油站智能监控系统改造解决方案

加油站智能监控系统改造解决方案针对加油区、卸油区工作人员睡岗、工作时间抽烟、打电话等违反规定行为、明火烟雾、扬尘等异常现象,加油站智能监控系统改造解决方案针对卸油区:灭火器材置放不合理,卸油时工作人员换岗,静电释放时长不够,开展智能分析识别。如系统发现上述…

秸秆焚烧监测系统

秸秆焚烧监控系统智能监测预警能实时监测监控摄像头画面范围内的田地,当秸秆焚烧监控系统发现现场监控摄像头监控画面中出现焚烧现象时,系统马上识别分析处理数据同步给监控管理后台,并自动将焚烧预警息并传送给相关负责人,这样可以第一次接到报警后可以立即发现阻止违规行…

安全帽图像识别算法

安全帽图像识别算法依据AI深度学习+边缘计算,通过机器视觉ai分析检测算法可以有效识别工人是不是合规和佩戴安全帽,安全帽图像识别算法提高视频监控不同场景下的主动分析与识别报警能力。安全帽图像识别算法系统搭载了全新的人工智能图像识别技术实时分析现场监控画面图像,与…