返回

深入浅出:用MockMvc测Spring Boot,轻松搞定GET、POST、HEAD请求,玩转返回值!

后端

MockMvc:Spring Boot单测的利器

什么是MockMvc?

MockMvc是一个强大的工具,可用于编写针对Spring Boot应用程序的快速、可靠的单元测试。它允许开发者模拟HTTP请求,从而可以轻松测试控制器、服务层等组件。

为何使用MockMvc进行单元测试?

  • 快速和可靠: MockMvc可以快速模拟HTTP请求,并对响应进行断言,从而实现快速和可靠的测试。
  • 易于使用: MockMvc的API简洁易用,即使是初学者也能轻松上手。
  • 功能齐全: MockMvc提供了各种功能,包括发送GET、POST、HEAD请求,设置请求头,解析JSON和字符串返回值等。

如何使用MockMvc?

要使用MockMvc,需要在测试类中添加以下注解:

@SpringBootTest
@AutoConfigureMockMvc

然后,就可以使用MockMvc发送HTTP请求并对响应进行断言了。

示例:GET请求

@Test
public void testGET() throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.get("/api/users"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.[0].name").value("John Doe"));
}

示例:POST请求

@Test
public void testPOST() throws Exception {
    User user = new User("John Doe");
    String json = new ObjectMapper().writeValueAsString(user);

    mockMvc.perform(MockMvcRequestBuilders.post("/api/users")
            .contentType(MediaType.APPLICATION_JSON)
            .content(json))
            .andExpect(status().isCreated())
            .andExpect(jsonPath("$.name").value("John Doe"));
}

示例:HEAD请求

@Test
public void testHEAD() throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.head("/api/users"))
            .andExpect(status().isOk());
}

示例:设置请求头

@Test
public void testWithHeaders() throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.get("/api/users")
            .header("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNjQ0NjA0NzgwfQ.L8nkqX_xH_jH3dWIFGjpL9y38K2D6NdbPXv-xMWwaM"))
            .andExpect(status().isOk()));
}

示例:解析返回值

@Test
public void testParseJSON() throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.get("/api/users"))
            .andExpect(jsonPath("$.[0].name").value("John Doe"));
}

@Test
public void testParseString() throws Exception {
    mockMvc.perform(MockMvcRequestBuilders.get("/api/hello"))
            .andExpect(contentAsString("Hello World!"));
}

结论

MockMvc是一个强大的工具,可用于编写针对Spring Boot应用程序的快速、可靠的单元测试。通过使用MockMvc,开发者可以轻松测试应用程序的各个组件,从而提高代码质量和应用程序的稳定性。

常见问题解答

  1. MockMvc和RestAssured有什么区别?
    MockMvc是一个用于单元测试的工具,而RestAssured是一个用于集成测试的工具。MockMvc运行在JVM中,而RestAssured发送实际HTTP请求。

  2. MockMvc是否支持异步请求?
    是的,MockMvc支持异步请求。可以使用AsyncResult类来模拟异步响应。

  3. 如何使用MockMvc进行多部分文件上传?
    可以使用MockMvcRequestBuilders.multipart()方法发送多部分文件上传请求。

  4. 如何使用MockMvc测试文件下载?
    可以使用MockMvcResponseBuilders.header()方法设置Content-Disposition头,然后使用MockMvcRequestBuilders.get()方法发送请求。

  5. 如何使用MockMvc模拟异常?
    可以使用MockMvcBuilders.standaloneSetup()方法创建控制器实例,然后使用doThrow()方法模拟异常。