Spring Boot是一個非常流行的web框架,在web應用程序的構建和單元測試中,我們需要模擬http請求和響應來進行測試,MockMvc框架就是為此而設計的。MockMvc框架可以模擬完整的http請求和響應,測試web應用程序的控制器和服務層。
一、MockMvc框架基礎
MockMvc框架包括MockMvcBuilders,它可以用於創建MockMvc類的對象。MockMvcBuilder定義了完整的Spring MVC環境,它可以自定義SpringMvc應用程序的配置。
以下是使用Spring Boot和MockMvc的基本測試代碼:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTests {
@Autowired
private MockMvc mockMvc;
@Test
public void test() throws Exception {
mockMvc.perform(get("/myController/test"))
.andExpect(status().isOk())
.andExpect(content().string("Hello World!"));
}
}
在這個測試代碼中,我們使用了@SpringBootTest注釋來啟用Spring Boot測試的自動配置,使得我們可以使用Spring Boot的自動配置來加載Spring應用程序上下文。
使用@AutoConfigureMockMvc注釋,我們可以自動配置MockMvc。在此處,我們注入MockMvc對象,並使用perform()方法執行http GET請求。使用andExpect()方法檢查響應狀態碼和響應體內容。
二、使用MockMvc框架測試控制器層
MockMvc框架可以很好的測試控制器層,我們可以使用模擬請求來測試控制器的各種HTTP方法。MockMvc還提供了一些有用的方法來模擬請求參數、頭、cookie和會話等內容。以下是一個示例:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTests {
@Autowired
private MockMvc mockMvc;
@Test
public void test() throws Exception {
mockMvc.perform(get("/myController/test"))
.andExpect(status().isOk())
.andExpect(content().string("Hello World!"));
}
@Test
public void paramTest() throws Exception {
mockMvc.perform(get("/myController/testParam")
.param("name", "Tom"))
.andExpect(status().isOk())
.andExpect(content().string("Hello Tom"));
}
@Test
public void postTest() throws Exception {
mockMvc.perform(post("/myController/testPost")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"name\":\"Tom\"}"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("Tom"));
}
}
在這個測試代碼中,我們演示了如何測試GET, POST方法和帶參數的請求。在第二個測試中,我們使用param()方法設置請求參數,然後檢查響應內容。在第三個測試中,我們使用了post()方法來模擬POST請求,然後檢查響應的JSON內容。
三、使用MockMvc框架測試服務層
MockMvc框架可以使用Mockito、JUnit和Hamcrest等框架,測試服務層Spring Bean。在服務層的測試中,我們通常使用Mockito來模擬依賴的服務。以下是一個示例:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyServiceTests {
@MockBean
private MyDAO myDAO;
@Autowired
private MyService myService;
@Test
public void test() throws Exception {
when(myDAO.findByName("Tom")).thenReturn(new MyEntity("Tom"));
String result = myService.getName("Tom");
assertEquals(result, "Tom");
}
}
在這個測試代碼中,我們使用@MockBean來注入一個模擬的MyDAO對象到Spring上下文中。在測試中,我們對myDAO進行了模擬,並使用when()方法定義方法參數和返回值。然後,我們調用myService.getName()方法來測試服務層的功能。
四、使用MockMvc框架測試異常
MockMvc框架也可以很好的測試異常的場景。以下是一個示例:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTests {
@Autowired
private MockMvc mockMvc;
@Test
public void testException() throws Exception {
mockMvc.perform(get("/myController/error"))
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.message").value("Bad Request"));
}
}
在這個測試代碼中,我們使用perform()方法來執行一個GET請求,其中我們調用了/myController/error接口,該接口會給出一個BadRequest響應。在測試中,我們使用andExpect()方法檢查響應狀態碼和響應體內容。如果響應類型不是BadRequest,測試會失敗。
五、結論
在Spring Boot應用程序中,MockMvc框架是一種非常方便實用的測試框架,它可以很好地測試web應用程序的控制器和服務層。在我們的測試中,我們可以使用Mockito模擬依賴的服務,在測試環境中模擬請求和響應。MockMvc還提供了很多有用的方法,如模擬請求參數、請求頭、cookie和會話等。MockMvc框架還可以很好的測試異常場景。總之,MockMvc框架提供了一種非常簡單、靈活的方式來測試Spring Boot應用程序,可以幫助我們更快地開發高質量的web應用程序。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/235837.html
微信掃一掃
支付寶掃一掃