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

Spring Boot MockMvc测试用例出现java.lang.NullPointerException的原因

空指针异常原因分析及解决方案

核心原因

你的测试类仅添加了@AutoConfigureMockMvc注解,但缺少启动Spring测试上下文的必要注解,导致@Autowired注入的MockMvc和@MockBean标记的NewsletterService都未被初始化,调用它们的方法时触发空指针异常。

Spring的@AutoConfigureMockMvc仅负责配置MockMvc实例,但需要结合@SpringBootTest(启动完整上下文)或@WebMvcTest(仅启动Web层上下文)才能让Spring容器创建并注入相关Bean。

修正方案

方案1:使用@SpringBootTest(完整上下文测试)

给测试类添加@SpringBootTest注解,启动完整的Spring应用上下文,确保MockMvc和MockBean能被正确注入:

@SpringBootTest
@AutoConfigureMockMvc
public class NewsletterTest {

  @Autowired
  private MockMvc mockMvc;

  @MockBean
  private NewsletterService service;

  @Test
  public void deleteNewsletterShouldDelete() throws Exception {

    this.mockMvc.perform(MockMvcRequestBuilders
            .delete("/delete-newsletter/11")
            .contentType(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk());

    verify(service, times(1)).deleteNewsletter(11L);
  }
}

方案2:使用@WebMvcTest(轻量Web层测试)

如果只需要测试Web控制器逻辑,推荐使用@WebMvcTest,它只会加载与Web层相关的Bean,测试更高效:

@WebMvcTest(NewsletterController.class)
public class NewsletterTest {

  @Autowired
  private MockMvc mockMvc;

  @MockBean
  private NewsletterService service;

  @Test
  public void deleteNewsletterShouldDelete() throws Exception {

    this.mockMvc.perform(MockMvcRequestBuilders
            .delete("/delete-newsletter/11")
            .contentType(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk());

    verify(service, times(1)).deleteNewsletter(11L);
  }
}

注:@WebMvcTest默认已经自动配置了MockMvc,所以可以不用额外添加@AutoConfigureMockMvc。

内容的提问来源于stack exchange,提问作者Mark likes Quark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:21:23