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;
 }

测试结果:
SpringBoot2.X (十五): 测试进阶之MockMvc_mvc

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

														---完---