SpringMVC测试框架
基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试。
接下来我们把集成web 环境测试 举例说明一下:
1、MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的MockMvc;
/**
* @author: fxbin
* @datetime: 2018/6/20 9:31
* @description:
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class DemoTest {
/**
* 注入一个web应用环境(容器)
*/
@Resource
private WebApplicationContext webApplicationContext;
//mvc 环境对象
private MockMvc mockMvc;
@Before
public void init(){
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
}
举个测试栗子:
@Test
public void findObject() throws Exception {
String str = mockMvc.perform(MockMvcRequestBuilders.get("/1/2")
.contentType(MediaType.APPLICATION_JSON_UTF8)).andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(2))
.andReturn().getResponse().getContentAsString();
System.out.println(str);
}
测试的接口是:
/**
* 功能描述: 测试restful 协议, 从路径中获取字段
* @param city_id
* @param user_id
* @return
*/
@GetMapping("/{city_id}/{user_id}")
public Object findObject(@PathVariable("city_id") String city_id, @PathVariable("user_id") String user_id){
params.clear();
params.put("city_id", city_id);
params.put("user_id", user_id);
return params;
}
测试结果:
2、部分方法说明
perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确;
andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台;
andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理;
3、MockMvc 测试整个流程程说明:
1、mockMvc.perform执行一个请求;
2、MockMvcRequestBuilders.get("/1/2")构造一个请求
3、ResultActions.andExpect添加执行完成后的断言
4、ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
5、ResultActions.andReturn表示执行完成后返回相应的结果。
测试过程如下:
1、准备测试环境
2、通过MockMvc执行请求
3.1、添加验证断言
3.2、添加结果处理器
3.3、得到MvcResult进行自定义断言/进行下一步的异步请求
4、卸载测试环境
[代码地址] https://gitee.com/fxbin/SpringBoot2Example
---完---