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

如何用Mockito测试控制器中的无返回值Delete方法

控制器Delete接口单元测试编写方案

针对你提供的无返回值Delete接口,单元测试可以从请求合法性、服务方法调用验证、响应状态码三个维度入手,用Spring Boot的MockMvc模拟HTTP请求,结合Mockito验证服务层方法的调用情况。以下是完整的测试代码和说明:

测试依赖与前置配置

确保测试类上添加以下注解,用于隔离控制器测试并Mock服务层:

@WebMvcTest(ClientController.class) // 只加载控制器相关上下文
class ClientControllerTest {

    @Autowired
    private MockMvc mockMvc; // 用于模拟HTTP请求

    @MockBean
    private ClientService clientService; // Mock服务层,避免调用真实DAO
}

完整测试方法实现

@Test
public void ClientController_deleteClient() throws Exception {
    // 1. 构造请求参数:模拟前端传入的DeleteClientModel
    DeleteClientModel deleteModel = new DeleteClientModel();
    deleteModel.setId(123); // 设置测试用的ID

    // 2. 发送POST请求到"/delete"接口,传入JSON格式的请求体
    mockMvc.perform(MockMvcRequestBuilders.post("/delete")
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(new ObjectMapper().writeValueAsString(deleteModel)))
            // 3. 验证响应状态码是否为200 OK
            .andExpect(status().isOk());

    // 4. 验证服务层的deleteClientById方法是否被正确调用(参数匹配、调用次数)
    Mockito.verify(clientService, Mockito.times(1))
            .deleteClientById(123);
}

测试逻辑说明

  • 请求模拟:用MockMvc构造POST请求,指定Content-Type为JSON,将DeleteClientModel序列化为JSON字符串作为请求体,模拟真实前端请求。
  • 响应验证:通过andExpect(status().isOk())确认接口返回200状态码,说明请求处理成功。
  • 服务调用验证:用Mockito.verify确保clientService.deleteClientById被调用了1次,且传入的ID与测试用例一致,验证业务逻辑的执行路径正确。

内容的提问来源于stack exchange,提问作者Karlz-Bandz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:35:25