「一、前言」
在前面的章节我们介绍过 Junit 的使用,也了解过 spring-test,今天我们来了解一个新玩意 -- mock 测试。这里仅仅做一个入门,对返回视图和返回 Json 数据的方法进行测试演示,不会把所有的方法都介绍到,具体文档详见链接:Mock Test,本章节主要讲解以下两部分内容:
1、Mock 测试简介
2、测试用例演示
二、Mock 测试简介
1、什么是 mock 测试
在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个
「虚拟的对象」
来创建以便测试的测试方法,就是
「mock 测试」
在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个
「虚拟的对象」
来创建以便测试的测试方法,就是mock 测试。
2、为什么使用 mock 测试
3、MockMVC 介绍
基于 RESTful 风格的 SpringMVC 的测试,我们可以测试完整的 Spring MVC 流程,即从 URL 请求到控制器处理,再到视图渲染都可以测试。
1)MockMvcBuilder
MockMvcBuilder 是用来构造 MockMvc 的构造器,其主要有两个实现:StandaloneMockMvcBuilder 和 DefaultMockMvcBuilder,对于我们来说直接使用
「静态工厂 MockMvcBuilders 创建」
即可。
2)MockMvcBuilders
负责创建 MockMvcBuilder 对象,有两种创建方式:
standaloneSetup(Object... controllers):通过参数指定一组控制器,这样就不需要从上下文获取了。
「webAppContextSetup」
(WebApplicationContext wac):指定 WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的 MockMvc,本章节下面测试用例均使用这种方式创建 MockMvcBuilder 对象。
3)MockMvc
对于服务器端的 SpringMVC 测试支持主入口点。通过 MockMvcBuilder 构造 MockMvcBuilder 由 MockMvcBuilders 建造者的静态方法去建造。
核心方法:perform(RequestBuilder rb) -- 执行一个 RequestBuilder 请求,会自动执行 SpringMVC 的流程并映射到相应的控制器执行处理,该方法的返回值是一个 ResultActions。
4)ResultActions
(1)
「andExpect」
:添加 ResultMatcher 验证规则,验证控制器执行完成后结果是否正确;
(2)
「andDo」
:添加 ResultHandler 结果处理器,比如调试时打印结果到控制台;
(3)
「andReturn」
:最后返回相应的
「MvcResult」
;然后进行自定义验证 / 进行下一步的异步处理;
5)MockMvcRequestBuilders
用来构建请求的,其主要有两个子类
「MockHttpServletRequestBuilder *和」
MockMultipartHttpServletRequestBuilder*(如文件上传使用),即用来 Mock 客户端请求需要的所有数据。
6)MockMvcResultMatchers
(1)用来匹配执行完请求后的
「结果验证」
(2)如果匹配失败将抛出相应的异常
(3)包含了很多验证 API 方法
7)MockMvcResultHandlers
(1)结果处理器,表示要对结果做点什么事情
(2)比如此处使用 MockMvcResultHandlers.print() 输出整个响应结果信息
8)MvcResult
(1)单元测试执行结果,可以针对执行结果进行
「自定义验证逻辑」
。
三、测试用例演示
1、添加依赖
org.springframework
spring-test
5.0.7.RELEASE
junit
junit
4.12
com.jayway.jsonpath
json-path
2.2.0
前两个 jar 依赖我们都已经接触过了,对于返回视图方法的测试这两个 jar 依赖已经足够了,第三个 jar 依赖是用于处理返回 Json 数据方法的,这里要明白每个 jar 的具体作用。
2、被测试的方法