MockMvc详解

MockMvc详解nbsp nbsp MockMvc nbsp SpringMVC 单元测试的独立测试 一 简介为何使用 MockMvc nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 对模块进行集成测试时 希望能够通过输入 URL 对 Controller 进行测试 如果通过启动服务器 建立 httpclient 进行测试 这样会使得测试变得很麻烦 比如 启动速度慢 测试验证不方便 依赖网络环境等 所以为了可以对 Controller 进行测试 我们引入了 MockMVC nbsp

二、测试逻辑

MockMvcBuilder构造MockMvc的构造器;

mockMvc调用perform,执行一个RequestBuilder请求,调用controller的业务处理逻辑;

perform返回ResultActions,返回操作结果,通过ResultActions,提供了统一的验证方式;

使用StatusResultMatchers对请求结果进行验证;

使用ContentResultMatchers对请求返回的内容进行验证;

ResultActions.andExpect:添加执行完成后的断言。添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确;

ResultActions.andDo:添加一个结果处理器,比如此处使用.andDo(MockMvcResultHandlers.print())输出整个响应结果信息,可以在调试的时候使用。

ResultActions.andReturn:表示执行完成后返回相应的结果

例子:

String example= "{"id":1, "name":"kqzu"}";   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("kqzhu");  // 验证name是否等于Zhukeqian String errorExample = "{"id":1, "name":"kqzhu"}";   MvcResult result = mockMvc.perform(post("/user")           .contentType(MediaType.APPLICATION_JSON) .content(errorExample)           .accept(MediaType.APPLICATION_JSON)) //执行请求           .andExpect(status().isBadRequest()) //400错误请求,  status().isOk() 正确  status().isNotFound() 验证控制器不存在         .andReturn();  //返回MvcResult
中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

   另外一种常见的媒体格式是上传文件之时使用的:
    multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式






附录:Requests & Responses 的标识及解释 

资料:史上最全,Spring MVC测试框架详解——服务端测试


















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208510.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午11:25
下一篇 2026年3月19日 上午11:26


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号