如何用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
相关产品推荐
相关产品推荐

