对模块进行集成测试时,但愿可以经过输入URL对Controller进行测试,若是经过启动服务器,创建http client进行测试,这样会使得测试变得很麻烦,好比,启动速度慢,测试验证不方便,依赖网络环境等,这样会致使测试没法进行,为了能够对Controller进行测试,能够经过引入MockMVC进行解决。html
MockMvc实现了对Http请求的模拟,可以直接使用网络的形式,转换到Controller的调用,这样能够使得测试速度快、不依赖网络环境,并且提供了一套验证的工具,这样能够使得请求的验证统一并且很方便。java
/** * 演示MockMVC使用 * @author zhanyongzhi */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath*:**web-config.xml") @WebAppConfiguration public class MockMvcTest { private MockMvc mockMvc; @Autowired private WebApplicationContext webApplicationContext; @Before public void setUp() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } }
校验Controller处理以后,请求是否为成功状态,返回的内容是否包含了:"{'foo':'bar'}"字符串。git
1 mockMvc调用perform,调用controller的业务处理逻辑
2 perform返回ResultActions,返回操做结果,经过ResultActions,提供了统一的验证方式。
3 使用StatusResultMatchers对请求结果进行验证
4 使用ContentResultMatchers对请求返回的内容进行验证github
/** * 演示MockMVC使用 * @author zhanyongzhi */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath*:**web-config.xml") @WebAppConfiguration public class MockMvcTest { private MockMvc mockMvc; @Autowired private WebApplicationContext webApplicationContext; @Before public void setUp() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } @Test public void demo() throws Exception { mockMvc.perform(get("/demo/test").accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) .andExpect(status().isOk()) .andExpect(content().contentType("application/json;charset=UTF-8")) .andExpect(content().json("{'foo':'bar'}")); } }