Spring MockMvc
使用MockMvc有两种方式
- 指定孤立的某个controller进行测试:单元测试,不需要构造ApplicationContext
- 集成整个WebApplicationContext进行测试:集成测试,会构造整个WebAppApplicationContext
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(xxx)
class MyWebTests {MockMvc mockMvc;@BeforeEachvoid setup() {this.mockMvc = MockMvcBuilders.standaloneSetup(new AccountController()).build();}
}@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(xxx)
@WebAppConfiguration
class MyWebTests {MockMvc mockMvc;@Autowiredpublic WebApplicationContext wac;@BeforeEachvoid setup(WebApplicationContext wac) {this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();}
}
假如使用孤立的某个controller
1. 在单元测试的启动过程中,可以看到如下日志,StandaloneMockMvcBuilder仅为这个controller创建RequestMapping和具体方法的映射。
2.可以为该孤立的controller创建一些特性,比如声明header中的accept属性,或返回的response中,状态码为200,contentType为application/json;charset=UTF-8
MockMvc mockMvc = standaloneSetup(new MusicController()).defaultRequest(get("/").accept(MediaType.APPLICATION_JSON)).alwaysExpect(status().isOk()).alwaysExpect(content().contentType("application/json;charset=UTF-8")).build();
常用的静态类
MockMvcBuilders.*
MockMvcRequestBuilders.*
MockMvcResultMatchers.*
MockMvcResultHandlers.*
Post请求
json形式post
mockMvc.perform(post("/user") // 路径.contentType(MediaType.APPLICATION_JSON) //用contentType表示具体请求中的媒体类型信息,MediaType.APPLICATION_JSON json数据格式.content(example) // 入参中的对象.accept(MediaType.APPLICATION_JSON)) //accept指定客户端能够接收的内容类型 .andExpect(content().contentType("application/json;charset=UTF-8")) //验证响应contentType == application/json;charset=UTF-8.andExpect(jsonPath("$.id").value(1)) //验证id是否为1,jsonPath的使用.andExpect(jsonPath("$.name).value("onion"); // 验证name是否等于onion
文件形式post
mockMvc.perform(multipart("/doc").file("a1", "ABC".getBytes("UTF-8")));
Get请求
mockMvc.perform(get("/hotels?thing={thing}", "somewhere")); // 改写url后缀形式传参
或
mockMvc.perform(get("/hotels").param("thing", "somewhere")); // httpServletRequest中的param传参
打印请求的出入参
MockMvcResultHandler的print()方法能够打印出出入参
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/vendor/batchModifyMerge").content(data).contentType(MediaType.APPLICATION_JSON).accept(MediaType.ALL)).andDo(MockMvcResultHandlers.print()).andReturn();// 打印结果如下
MockHttpServletRequest:HTTP Method = POSTRequest URI = /vendor/batchModifyMergeParameters = {}Headers = {Content-Type=[application/json], Accept=[*/*]}Handler:Type = com.vip.ps.controller.VisApplyHeadControllerMethod = public MyController.batchModifyMerge(java.util.List<Object>,javax.servlet.http.HttpServletRequest)Async:Was async started = falseAsync result = nullResolved Exception:Type = nullModelAndView:View name = nullView = nullModel = nullFlashMap:MockHttpServletResponse:Status = 200Error message = nullHeaders = {Content-Type=[application/json;charset=UTF-8]}Content type = application/json;charset=UTF-8Body = {"status":"error","data":{},"message":"会话失效"}Forwarded URL = nullRedirected URL = nullCookies = []
往请求前面增加filter
mockMvc = standaloneSetup(new PersonController()).addFilters(new CharacterEncodingFilter()).build();
Spring MockMvc相关推荐
- 就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers(转)
接我前面一篇文章关于RestAssured测试Restful web service的, RestAssured还有一个功能, 使用RestAssuredMockMvc 单元测试你的Spring MV ...
- 【译】Spring 官方教程:使用 Restdocs 创建 API 文档
原文:Creating API Documentation with Restdocs 译者:HoldDie 校对:Jitianyu 本指南将引导你了解在 Spring 应用程序中为 HTTP 端点( ...
- ZetCode Spring 教程
来源:ApacheCN ZetCode 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request. 请您勇敢地去翻译和改进翻译.虽然 ...
- Spring Boot Mock
Spring MockMvc 今天来学习下如何使用Spring Mvc来对controller定义的Restful API进行集成测试.MockMVC 类是Spring test 框架的一部分,因此不 ...
- spring boot——MockMvc的用法 (SpringBoot 1.5.18)下测试通过
spring boot--MockMvc的用法 1.pom配置 <dependency><groupId>org.springframework.boot</groupI ...
- Spring MVC学习总结(14)——SpringMVC测试框架之mockMVC详解
SpringMVC测试框架 基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试. 一 MockMvcBui ...
- java如何测controller层_用MockMvc对Spring mvc中的controller层进行单元测试
参考:http://sishuok.com/forum/posts/list/7981.html ; http://www.tuicool.com/articles/6nqeIbm 用下面的这种方 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)MockMvc服务端的单元测试
日常啰嗦 承接前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例>,已经讲解了dao层和service层的单元测试,还有控制器这层也不能 ...
- spring boot——MockMvc的用法
1.pom配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>s ...
最新文章
- Python未来的发展趋势怎么样
- 4.2 数据集划分-机器学习笔记-斯坦福吴恩达教授
- MySQL事物(详解并发问题和隔离级别)(小白也能懂哦)
- 域名解析文件hosts文件是什么?如何修改hosts文件?
- 算法设计与分析——回溯法——圆排列问题
- if( 1 == x ) 比 if( x == 1 ) 哪个好
- Java 反射(Class class相关)
- 微课|中学生可以这样学Python(例5.4):计算决赛现场选手得分
- 如何在Ubuntu上安装SQL Server
- 12月9日10日 总结
- android开发图片格式,Android程序开发如何处理图像格式类及图像转换
- 提升开发效率之命名规范
- java batik svg_java使用batik转换svg文件
- 数值分析-LU三角分解
- c++构造函数的定义
- yt-dlp教程如何下载高清视频
- deepin 蓝牙适配器 安装
- 怎么查看一段时间的计算机ip,如何查看电脑中使用过的历史IP地址
- python一键批量制作word邀请函
- linux中cmd是什么文件格式,CMD 文件扩展名: 它是什么以及如何打开它?