使用MockMvc測試Spring mvc Controller

概述

  對模塊進行集成測試時,但願可以經過輸入URL對Controller進行測試,若是經過啓動服務器,創建http client進行測試,這樣會使得測試變得很麻煩,好比,啓動速度慢,測試驗證不方便,依賴網絡環境等,這樣會致使測試沒法進行,爲了能夠對Controller進行測試,能夠經過引入MockMVC進行解決。html

簡介

  MockMvc實現了對Http請求的模擬,可以直接使用網絡的形式,轉換到Controller的調用,這樣能夠使得測試速度快、不依賴網絡環境,並且提供了一套驗證的工具,這樣能夠使得請求的驗證統一併且很方便。java

運行配置

用到的註解

  • RunWith(SpringJUnit4ClassRunner.class): 表示使用Spring Test組件進行單元測試;
  • WebAppConfiguration: 使用這個Annotate會在跑單元測試的時候真實的啓一個web服務,而後開始調用Controller的Rest API,待單元測試跑完以後再將web服務停掉;
  • ContextConfiguration: 指定Bean的配置文件信息,能夠有多種方式,這個例子使用的是文件路徑形式,若是有多個配置文件,能夠將括號中的信息配置爲一個字符串數組來表示;

基本框架

/**
 * 演示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'}"));
    }
}

完整代碼在github中查看web

參考

test mockmvc
integration testing
spring mvc unit testspring

相關文章
相關標籤/搜索