测试controller
初始化
SpringBoot 中很方便
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloWorldControlerTests {
    @Autowired
    private MockMvc mockMvc;
}
声明请求
- get:声明发送一个get请求的方法,生成MockHttpServletRequestBuilder。
 - 还有其他的请求的方法:post、put、delete等。
 
MockHttpServletRequestBuilder API:
- header:添加头信息
 - contentType:指定请求的contentType头信息
 - accept:指定请求的Accept头信息
 - content:指定请求Body体内容
 - requestAttr:设置请求属性数据
 - param:添加request的参数
 
get
MockHttpServletRequestBuilder builder = get("/test")
                    .param("size", "5");
post
MockHttpServletRequestBuilder builder = post("/test")
                .header("X-Operator", OPERATOR)
                .accept(APPLICATION_JSON)
                .contentType(APPLICATION_JSON)
                .content("{ \"blockIp\": false, \"idList\": [] }");    
执行请求
- perform:执行一个RequestBuilder请求,将得到ResultActions;
 
ResultActions完成如下三件事:
- andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确;
- MockMvcResultMatchers 返回 ResultMatcher实例。API如下:
 - status:得到响应状态验证器StatusResultMatchers
 - header:得到响应Header验证器HeaderResultMatchers
 - 等等
 
 - andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台;
- MockMvcResultHandlers提供静态工厂方法print(),返回一个ResultHandler
 
 - andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理;
- getRequest:得到执行的请求
 - getResponse:得到执行后的响应
 - getAsyncResult:得到异步执行的结果
 - 等等
 
 
ResultActions actions = mvc.perform(builder);
MvcResult mvcResult = actions
                .andExpect(MockMvcResultMatchers.status().is(status.value()))
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
                
MockHttpServletResponse response = mvcResult.getResponse();
测试示例
测试普通控制器
 mockMvc.perform(get("/user/{id}", 1)) //执行请求  
        .andExpect(model().attributeExists("user")) //验证存储模型数据  
        .andExpect(view().name("user/view")) //验证viewName  
        .andExpect(forwardedUrl("/WEB-INF/jsp/user/view.jsp"))//验证视图渲染时forward到的jsp  
        .andExpect(status().isOk())//验证状态码  
        .andDo(print()); //输出MvcResult到控制台  
全局配置
 mockMvc = webAppContextSetup(wac)  
        .defaultRequest(get("/user/1").requestAttr("default", true)) //默认请求 如果其是Mergeable类型的,会自动合并的哦mockMvc.perform中的RequestBuilder  
        .alwaysDo(print())  //默认每次执行请求后都做的动作  
        .alwaysExpect(request().attribute("default", true)) //默认每次执行后进行验证的断言  
        .build();