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

为什么MockMvc非空时调用perform方法仍抛出空指针异常

Spring Boot单元测试空指针异常原因分析

核心触发原因

你代码中MockMvc实例的注解使用存在冲突,直接导致了空指针异常:

  • MockMvc字段上同时标注了@Autowired和@MockBean两个冲突注解,@MockBean优先级更高,会将Spring容器中由@AutoConfigureMockMvc自动生成的真实可用MockMvc实例,替换为Mockito生成的空白mock对象
  • 你没有为这个空白mock对象的perform方法配置返回规则,调用mockMvc.perform()默认返回null,后续调用null的andExpect方法就会抛出空指针,这也符合你提到的mockMvc本身不为空的验证结果。

直接修复方案

删掉MockMvc字段上的@MockBean注解,仅保留@Autowired即可,正确配置参考:

@SpringBootTest
@AutoConfigureMockMvc
public class ApiControlerTest {

    @Autowired
    private MockMvc mockMvc;  

    @Test
    public void writeWeightMetric() throws Exception {
        assertNotNull(mockMvc);
        String json = "{\"id\": \"15\", \"measurement\": 30, \"datetime\": \"29-12-2021-15-23-39\"}";

        mockMvc.perform(
                MockMvcRequestBuilders.post("postURI")
                .contentType(MediaType.APPLICATION_JSON)
                .content(json).accept(MediaType.APPLICATION_JSON))
                .andExpect(MockMvcResultMatchers.status().isOk());
    }
}

其他可能触发该异常的场景

  • 目标Controller未被Spring容器正常扫描:如果启动类和Controller不在同一包或子包路径下,需要在@SpringBootTest注解中指定扫描的类,确保请求可以正常路由到对应接口
  • 请求路径配置错误:代码中POST路径使用了占位符"postURI",需替换为实际的接口路径,路径不匹配会导致找不到请求处理器,返回空结果触发空指针

内容的提问来源于stack exchange,提问作者Kristjan Bulič

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:18:03