使用MockMvc進行單元測試
在前後端分離的項目中,我們經常需要測試接口,除了使用第三方工具或是接口文檔進行測試,我們還可以在測試代碼中使用MockMvc進行單元測試。
首先創建一個被測試的接口
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "Hello World";
}
}
測試代碼
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class Sbdemo01ApplicationTests {
@Autowired
private MockMvc mockMvc;
@Test
public void contextLoads() throws Exception{
mockMvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(content().string(equalTo("Hello World")));
}
}
測試通過
其中要使用MockMvc需要添加@AutoConfigurationMockMvc
註解
方法淺析:
- perform:執行一個RequestBuilder請求,會自動執行SpringMVC的流程並映射到相應的控制器執行處理;
- get:聲明發送一個get請求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object… urlVariables):根據uri模板和uri變量值得到一個GET請求方式的。另外提供了其他的請求的方法,如:post、put、delete等。
- param:添加request的參數,如上面發送請求的時候帶上了了pcode = root的參數。假如使用需要發送json數據格式的時將不能使用這種方式,可見後面被@ResponseBody註解參數的解決方法
- andExpect:添加ResultMatcher驗證規則,驗證控制器執行完成後結果是否正確(對返回的數據進行的判斷);
- andDo:添加ResultHandler結果處理器,比如調試時打印結果到控制檯(對返回的數據進行的判斷);
- andReturn:最後返回相應的MvcResult;然後進行自定義驗證/進行下一步的異步處理(對返回的數據進行的判斷);