使用Mockito设置模拟时出现异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference
设置代码是这样的:
Mockito
.when(aMock.method(any(), any()))
.thenReturn(something);
method
需要两个double
个参数。
答案 0 :(得分:3)
any()
返回null
。这种选择是不可避免的,因为any()
的签名是
public static <T> T any()
由于泛型类型在Java中被删除,并且由于没有任何内容传递给包含任何类型信息的方法(例如Class<T>
),null
是唯一合理的返回值。
如果mock的方法具有基本类型的参数,则会产生问题,因为取消装箱此null
值会引发NullPointerException
。
有两种可能的解决方案。您可以使用原始版本(例如anyDouble()
),也可以使用接受Class
的版本(例如any(Double.class)
)。在后一种情况下,由于我们正在向方法提供类型信息,因此可以使用此信息返回合理的非空值(例如,在双倍的情况下为0.0D
。)
答案 1 :(得分:2)
错误的原因有点人为 - any()
不能用来代替原始数据类型。
anyChar()
,anyDouble()
等必须用于原始类型。