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

Mockito.mock失效,调用Mockito.when触发NullPointerException问题排查

类A Mock时触发NPE的可能原因及排查方向
  • 类A重写的toString()存在空指针风险
    打印mock实例时抛出NPE,说明调用toString()时访问了未初始化的成员。Mockito生成的mock不会自动初始化原类的成员变量,如果类A自定义的toString()里引用了这些未初始化的变量,就会触发空指针。

  • doX()是final/static/private方法
    Mockito默认无法拦截final、static、private方法的调用。当执行when(a.doX()).thenReturn("X")时,会直接调用原方法,如果原方法内部存在null引用,就会抛出NPE。这种情况需要使用Mockito-inline扩展来支持mock这类特殊方法。

  • 类A的静态初始化块或构造函数有异常逻辑
    虽然Mockito创建mock时不会完全执行构造函数,但类A的静态初始化块如果有强制初始化依赖对象的逻辑,而mock无法提供这些依赖,会导致mock实例内部状态异常,后续调用方法时触发空指针。

  • 类A被其他字节码增强工具修改
    若类A被Lombok、AspectJ、Spring AOP等工具做过字节码增强,可能和Mockito的代理生成机制冲突,导致mock实例不完整,调用方法时出现NPE。

  • Mockito全局配置被篡改
    如果自定义了Mockito的MockMaker或其他全局mock策略,可能导致针对类A的mock生成失败,无法创建正常的代理实例。

排查建议

  1. 临时注释类A的toString()重写代码,测试打印mock实例是否正常。
  2. 检查doX()的方法修饰符,若为final/static,添加Mockito-inline依赖后重试。
  3. 排查类A的静态代码块和构造函数,移除或修改可能导致null的逻辑。
  4. 暂时移除类A相关的字节码增强依赖,验证mock是否能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:09:17