解釋說明:
1. Spring測試框架提供MockMvc對象,可以在不需要客戶端-服務端請求的情況下進行MVC測試,完全在服務端這邊就可以執行Controller的請求,跟啓動了測試服務器一樣。
2.perform(get(...))建立web請求。在我們的第三個用例中,通過MockMvcRequestBuilder執行GET請求。
andExpect(...)可以在perform(...)函數調用後多次調用,表示對多個條件的判斷,這個函數的參數類型是ResultMatcher接口,在MockMvcResultMatchers這這個類中提供了很多返回ResultMatcher接口的工具函數。這個函數使得可以檢測同一個web請求的多個方面,包括HTTP響應狀態碼(response status),響應的內容類型(content type),會話中存放的值,檢驗重定向、model或者header的內容等等。
代碼如下:
@RunWith(SpringRunner.class) @SpringBootTest(classes = Train01Application.class) @WebAppConfiguration public class Train01ApplicationTests { @Autowired private WebApplicationContext context; private MockMvc mockMvc; private ObjectMapper mapper=new ObjectMapper(); @Before public void setupMockMvc() throws Exception{ mockMvc= MockMvcBuilders.webAppContextSetup(context).build(); } @Test public void testSelect() throws Exception { mockMvc.perform(MockMvcRequestBuilders.post("/customer/list") .contentType(MediaType.APPLICATION_JSON_UTF8) .content("{ \"ciname\":\"\",\"cisex\":2,\"ciareacode\":\"310107\",\"ciofficename\":\"\" }")) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8)) .andDo(MockMvcResultHandlers.print()); } @Test public void testAdd() throws Exception { mockMvc.perform(MockMvcRequestBuilders.post("/customer/add") .contentType(MediaType.APPLICATION_JSON_UTF8) .content("{\n" + " \"ciname\":\"李四\", \n" + " \"citelephone\":\"112121212\", \n" + " \"cisex\":0, \n" + " \"cibirthday\":\"19940808\", \n" + " \"cizipcode\":\"14000\", \n" + " \"cifax\":\"asfgafas\", \n" + " \"ciofficename\":\"上海翰都1\", \n" + " \"ciareafullname\":\"上海市-市轄區-普陀區\", \n" + " \"ciaddress\":\"零陵路\", \n" + " \"cipassword\":\"123\", \n" + " \"ciremark\":\"新增客戶功能測試5\" \n" + "}")) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8)) .andDo(MockMvcResultHandlers.print()); } @Test public void testUpdate() throws Exception { mockMvc.perform(MockMvcRequestBuilders.post("/customer/update") .contentType(MediaType.APPLICATION_JSON_UTF8) .content("{\n" + "\t \"ciid\":65,\n" + " \"ciname\":\"王五\", \n" + " \"citelephone\":\"112121212\", \n" + " \"cisex\":0, \n" + " \"cibirthday\":\"19940808\", \n" + " \"cizipcode\":\"14000\", \n" + " \"cifax\":\"asfgafas\", \n" + " \"ciofficename\":\"上海翰都1\", \n" + " \"ciareafullname\":\"上海市-市轄區-普陀區\", \n" + " \"ciaddress\":\"零陵路\", \n" + " \"cipassword\":\"123\", \n" + " \"ciremark\":\"新增客戶功能單元第6次測試\" \n" + "}")) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8)) .andDo(MockMvcResultHandlers.print()); } }