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

如何使用Mockito测试标注@ResponseStatus的void方法返回的HTTP状态

测试实现方案

你可以结合Spring Boot提供的MockMvc组件和Mockito完成Controller层单元测试,无需启动完整服务上下文,测试逻辑如下:


1. 测试类基础配置

import org.springframework.http.HttpStatus;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import com.fasterxml.jackson.databind.ObjectMapper;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.mockito.Mockito.verify;
import static org.mockito.ArgumentMatchers.any;

// 替换为你实际的Controller类名
@WebMvcTest(RestaurantController.class)
public class RestaurantControllerTest {

    @Autowired
    private MockMvc mockMvc;

    // Mock掉Controller依赖的Service层,避免真实数据库操作
    @MockBean
    private RestaurantService restaurantService;

    @Autowired
    private ObjectMapper objectMapper;

2. 正常调用场景测试方法

@Test
    public void create_WhenValidRequest_Returns201Created() throws Exception {
        // 构造合法的请求DTO,字段值要满足@Valid的校验规则
        RestaurantCreationDTO validDTO = new RestaurantCreationDTO();
        validDTO.setName("测试餐厅");
        validDTO.setAddress("测试地址");
        // 其他必填字段按你的业务规则赋值...

        // 执行POST请求,直接断言响应状态码
        mockMvc.perform(post("/restaurant") // 替换为你实际的接口请求路径
                .contentType("application/json")
                .content(objectMapper.writeValueAsString(validDTO)))
                .andExpect(status().isCreated()); // 验证返回201 CREATED状态码

        // 可选:验证service层的create方法被正确调用1次
        verify(restaurantService).create(any(RestaurantCreationDTO.class));
    }
}

补充说明

  • @WebMvcTest只会加载Controller层相关Bean,测试运行速度远快于完整服务启动测试
  • 你的接口为void返回类型,正常请求无响应体,只需断言status().isCreated()即可验证@ResponseStatus注解生效
  • 如果需要测试参数校验失败的场景,只需构造字段不合法的DTO,断言返回400状态码即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 16:18:01