使用MockMvc測試Spring mvc Controller


概述

對模塊進行集成測試時,希望能夠通過輸入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中查看

參考

test mockmvc
integration testing
spring mvc unit test


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM