MockMvc
主要用来进行Web Controller的单元测试。
常用方法
MockMvc
- perform(RequestBuilder requestBuilder): ResultAction
执行一个HTTP请求, 入口参数为RequestBuilder,输出结果为ResultAction
MockMvcRequestBuilders
构建各类HTTP Request请求的工厂方法
- get(urltemplate, vars)
- post(urltemplate, vars)
- delete(urltemplate, vars)
- put(urltemplate, vars)
MockHttpServletRequestBuilder
构建Request的缺省builder
- cookie(Cookie… cookie): 设置信息
- content(String str): 请求内容
- contentType(): 设置contentType类型
- param(String name, String … value): 设置参数
- session()
- requestAttr()
- flashAttr()
- locale()
- accept(): 接手内容类型MediaType
ResultMatcher
功能描述: 用来执行
- match(MvcResult result): void
针对执行结果进行断言判断 - matchAll(ResultMatcher… matchers) : ResultMatcher
执行断言,批量执行
ResultHandler
结果信息Handler
- void handle(MvcResult result) : 处理结果信息
ResultActions
- andExpect(ResultMatcher var1) : ResultActions
对返回的Result结果进行断言, 返回为ResultActions,运行流式风格调用 - andDo(ResultHandler handler): ResultActions
添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。返回对象为ResultActions - andReturn() : MvcResult
表示执行完成后返回相应的结果,其结果为MvcResult
MvcResult
访问Http请求的结果信息
- getRequest()
- getResponse()
- getHandler()
- getModelAndView()
…
MockMvcResultMatchers
提取请求结果信息的各类断言
- status(): StatusResultMatchers 结果信息
- content(): 内容
- header(): 头信息
- model(): 模型信息
- flash(): Flash attribute
- forwardedUrl():
- redirectedUrl()
- cookie()
- jsonPath(String expression, Matcher matcher)
- jsonPath(String expression, Object… args)
- xpath(String expression, Object… args)
- xpath(String expression, Matcher matcher)
其中Matcher类为org.hamcrest包中的类。
StatusResultMatchers
检查结果中的各类信息
- isBadRequest(): 不合法的请求
- isOk(): 200
使用分析
代码示例:
mockMvc.perform(get("/games").contentType(MediaType.TEXT_PLAIN_VALUE))
.andExpect(status().isOk())
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.status", Matchers.is("success")))
.andExpect(jsonPath("$.games[0].name", Matchers.equalToIgnoringCase("zhangsan")));
mockMvc为MockMvc的对象实例,执行其perform()方法,获取ResultAction结果信息。
get(): 其实是MockMvcRequestBuilders.get()方法的简写,其构建出MockHttpServletRequestBuilder, contentType()为其方法,用以设置mediaType类型。
andExepct()为ResultAction的方法,其中status()为MockMvcResultMatchers方法,返回StatusResultMatchers。
content()为MockMvcResultMatchers方法,返回ContentResultMatchers实例。
jsonPath()为MockMvcResultMatchers方法,返回JsonPathResultMatchers实例,其中参数为
总结
由于篇幅所限,就不再一一列举其中定义的所有方法,仅仅罗列其中的关键方法若干,做以展示,其余的方法大家可以根据实际需求在项目中使用。