You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MockMvc测试Spring Boot Controller的POST接口

测试Spring Boot POST控制器端点的方案

首先我先把你提供的控制器代码补全并格式化好(假设方法核心是接收id参数并调用服务处理):

@Slf4j
@Controller
public class AdministrationController {

    private final AdministrationService administrationService;

    @Autowired
    public AdministrationController(AdministrationService administrationService) {
        this.administrationService = administrationService;
    }

    @PostMapping("/administration")
    public @ResponseBody ResponseEntity<String> handleAdministrationRequest(@RequestParam("id") Long id) {
        log.info("Received request with id: {}", id);
        // 调用服务层处理逻辑
        administrationService.processId(id);
        return ResponseEntity.ok("Request processed successfully");
    }
}

接下来,我们可以用Spring Boot官方推荐的MockMvc来做控制器层的单元测试——这种方式不需要启动完整应用上下文,只加载控制器相关组件,测试效率高且聚焦。

步骤1:确认测试依赖到位

如果用Maven,你的pom.xml里应该已经默认包含了Spring Boot测试依赖(创建项目时自动添加):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

步骤2:编写测试类

创建对应测试类,用@WebMvcTest聚焦控制器测试,用@MockBean模拟依赖的服务层,避免依赖真实服务实现:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;

import static org.mockito.Mockito.verify;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;

@WebMvcTest(AdministrationController.class)
class AdministrationControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private AdministrationService administrationService;

    @Test
    void shouldProcessPostRequestWithValidId() throws Exception {
        // 构造并发送带id参数的POST请求
        mockMvc.perform(post("/administration")
                        .param("id", "123"))
                // 验证响应状态码为200 OK
                .andExpect(status().isOk())
                // 验证响应内容符合预期
                .andExpect(content().string("Request processed successfully"));

        // 验证服务层的processId方法被正确调用,参数为123L
        verify(administrationService).processId(123L);
    }

    @Test
    void shouldReturnBadRequestWhenIdIsMissing() throws Exception {
        // 发送不带id参数的POST请求
        mockMvc.perform(post("/administration"))
                // 验证响应状态码为400 Bad Request
                .andExpect(status().isBadRequest());
    }
}

关键测试逻辑说明

  • @WebMvcTest:只初始化Spring MVC相关上下文,不会加载整个应用的所有Bean,测试更轻量。
  • @MockBean:创建模拟的AdministrationService实例注入控制器,无需关心服务层具体实现,只需验证控制器是否正确调用服务方法。
  • MockMvc.perform():构建并发送HTTP请求,支持设置参数、请求体、请求头等。
  • andExpect():验证响应的状态码、内容、头等是否符合预期。
  • verify():验证模拟服务方法是否被调用,以及调用参数是否正确。

这样就能完整覆盖你的POST端点核心逻辑:正确接收参数、调用服务、返回响应,以及参数缺失时的错误处理。

内容的提问来源于stack exchange,提问作者handris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:39:10