Mockito匹配原始类型

时间:2018-04-02 20:30:32

标签: java mockito

使用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个参数。

2 个答案:

答案 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()等必须用于原始类型。