對模塊進行集成測試時,但願可以經過輸入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'}")); } }