使用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相关推荐

  1. 就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers(转)

    接我前面一篇文章关于RestAssured测试Restful web service的, RestAssured还有一个功能, 使用RestAssuredMockMvc 单元测试你的Spring MV ...

  2. 【译】Spring 官方教程:使用 Restdocs 创建 API 文档

    原文:Creating API Documentation with Restdocs 译者:HoldDie 校对:Jitianyu 本指南将引导你了解在 Spring 应用程序中为 HTTP 端点( ...

  3. ZetCode Spring 教程

    来源:ApacheCN ZetCode 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request. 请您勇敢地去翻译和改进翻译.虽然 ...

  4. Spring Boot Mock

    Spring MockMvc 今天来学习下如何使用Spring Mvc来对controller定义的Restful API进行集成测试.MockMVC 类是Spring test 框架的一部分,因此不 ...

  5. spring boot——MockMvc的用法 (SpringBoot 1.5.18)下测试通过

    spring boot--MockMvc的用法 1.pom配置 <dependency><groupId>org.springframework.boot</groupI ...

  6. Spring MVC学习总结(14)——SpringMVC测试框架之mockMVC详解

    SpringMVC测试框架 基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试. 一 MockMvcBui ...

  7. java如何测controller层_用MockMvc对Spring mvc中的controller层进行单元测试

    参考:http://sishuok.com/forum/posts/list/7981.html  ;  http://www.tuicool.com/articles/6nqeIbm 用下面的这种方 ...

  8. Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)MockMvc服务端的单元测试

    日常啰嗦 承接前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例>,已经讲解了dao层和service层的单元测试,还有控制器这层也不能 ...

  9. spring boot——MockMvc的用法

    1.pom配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>s ...

最新文章

  1. Python未来的发展趋势怎么样
  2. 4.2 数据集划分-机器学习笔记-斯坦福吴恩达教授
  3. MySQL事物(详解并发问题和隔离级别)(小白也能懂哦)
  4. 域名解析文件hosts文件是什么?如何修改hosts文件?
  5. 算法设计与分析——回溯法——圆排列问题
  6. if( 1 == x ) 比 if( x == 1 ) 哪个好
  7. Java 反射(Class class相关)
  8. 微课|中学生可以这样学Python(例5.4):计算决赛现场选手得分
  9. 如何在Ubuntu上安装SQL Server
  10. 12月9日10日 总结
  11. android开发图片格式,Android程序开发如何处理图像格式类及图像转换
  12. 提升开发效率之命名规范
  13. java batik svg_java使用batik转换svg文件
  14. 数值分析-LU三角分解
  15. c++构造函数的定义
  16. yt-dlp教程如何下载高清视频
  17. deepin 蓝牙适配器 安装
  18. 怎么查看一段时间的计算机ip,如何查看电脑中使用过的历史IP地址
  19. python一键批量制作word邀请函
  20. linux中cmd是什么文件格式,CMD 文件扩展名: 它是什么以及如何打开它?

热门文章

  1. 第五章 网络 之 TCP/IP
  2. OpenStack组件--Cinder
  3. 第一章 Python Kivy 学习 -- Kivy介绍及环境安装
  4. java1.8垃圾回收机制_1.8 CMS垃圾收集器
  5. chrome 黑色背景 保护眼睛
  6. 寝室打扫卫生负责人查询
  7. 基于朴素贝叶斯分类器的钞票真伪识别模型
  8. hadoopHa集群namenode起不来的原因(1)
  9. python字符位运算_python 字符串位运算-女性时尚流行美容健康娱乐mv-ida网
  10. SQL求最高在线人数以及最高峰时间段