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

使用Mockito设置Mock时触发空指针异常:double类型参数匹配问题

解决Mockito Mock对象时的Double拆箱空指针异常

我太懂这个坑了!你碰到的NullPointerException本质是基本类型拆箱时的空指针问题,咱们来理清楚原因和解决办法:

问题根源

你的method方法需要两个double基本类型参数,但你用了any()作为匹配器——Mockito的any()默认返回的是null(因为它是针对Object类型的匹配器)。当JVM试图把这个null的Double包装类自动拆箱成double基本类型时,就会调用doubleValue()方法,而null对象调用方法必然触发NPE,也就是你看到的异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference

快速解决方案

把匹配器换成Mockito专门为基本类型设计的anyDouble(),它会返回一个合法的double值(默认是0.0),不会触发拆箱问题。修改后的代码如下:

Mockito.when(aMock.method(anyDouble(), anyDouble())).thenReturn(something);

额外检查点

还要确认something的合法性:

  • 如果method的返回值是double基本类型,那thenReturn里的something绝对不能是null,否则返回时同样会触发拆箱NPE,必须传入一个有效的double值(比如0.0、1.5等)
  • 如果method返回的是Double包装类型,那something可以是null,但要确保业务逻辑允许这种情况

避坑小贴士

Mockito的匹配器要和参数类型严格对应:

  • 匹配int用anyInt()
  • 匹配long用anyLong()
  • 匹配boolean用anyBoolean()
    别再用any()来匹配基本类型啦,大概率会踩拆箱的坑!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:39:13