1. 程式人生 > >使用MockMVC測試控制器【轉】

使用MockMVC測試控制器【轉】

概述

  對模組進行整合測試時,希望能夠通過輸入URL對Controller進行測試,如果通過啟動伺服器,建立http client進行測試,這樣會使得測試變得很麻煩,比如,啟動速度慢,測試驗證不方便,依賴網路環境等,這樣會導致測試無法進行,為了可以對Controller進行測試,可以通過引入MockMVC進行解決。

簡介

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

執行配置

用到的註解

  • 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’}”字串。

1 mockMvc呼叫perform,呼叫controller的業務處理邏輯
2 perform返回ResultActions,返回操作結果,通過ResultActions,提供了統一的驗證方式。
3 使用StatusResultMatchers對請求結果進行驗證
4 使用ContentResultMatchers對請求返回的內容進行驗證

/**
 * 演示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中檢視

【原文地址】:https://www.cnblogs.com/xiaohunshi/p/5706943.html