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

JUnit Mockito中when().thenReturn()抛出NullPointerException问题求助

单元测试NPE问题排查方案

核心原因及修复步骤

  • Mockito注解未初始化,mock对象为null
    你代码中的测试类仅标注了错误的@Runner注解,没有正确启用Mockito注解支持:
    • JUnit4场景需要给测试类添加@RunWith(MockitoJUnitRunner.class)注解
    • JUnit5场景需要给测试类添加@ExtendWith(MockitoExtension.class)注解
    • 也可以在测试前置方法中手动初始化注解:
      @Before
      public void mockInit() {
          MockitoAnnotations.openMocks(this);
      }
      
    注解未生效时@Mock修饰的class_a对象本身是null,调用when(class_a.fun_a(par))时操作空对象直接抛出NPE。
  • 方法参数定义/调用不匹配
    你贴出的代码存在逻辑冲突:Class_b的fun_b方法内调用的是无参的class_a.fun_a(),但Class_a定义的fun_a是带参方法,测试类中mock的也是带参的fun_a(par),如果是实际代码的笔误请先修正参数数量的一致性。
    如果入参是自定义类型,确保mock时传入的参数和实际调用时的参数满足equals匹配规则,否则可以用Mockito参数匹配器(如any(ParamType.class)、eq(paramObj))来做匹配。
  • final类/方法导致mock失效
    Mockito默认不支持mock final类、final方法,如果你的Class_a或者fun_a方法被final修饰,mock操作会失效,调用方法时会执行真实逻辑,若真实逻辑依赖空对象就会触发NPE。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:00:00