使用MockMVC測試控制器【轉】
阿新 • • 發佈:2018-12-20
概述
對模組進行整合測試時,希望能夠通過輸入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'}"));
}
}