使用 Mockito 设置模拟时出现异常:
java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference
Run Code Online (Sandbox Code Playgroud)
设置代码是这样的:
Mockito
.when(aMock.method(any(), any()))
.thenReturn(something);
Run Code Online (Sandbox Code Playgroud)
哪里method需要两个double参数。
Pau*_*ton 10
any()返回null。这个选择是不可避免的,因为签名any()是
public static <T> T any()
Run Code Online (Sandbox Code Playgroud)
由于泛型类型在 Java 中被删除,并且由于没有任何内容传递给携带任何类型信息(例如 a Class<T>)的方法,因此null是唯一合理的返回值。
如果模拟的方法具有原始类型的参数,则会产生问题,因为取消装箱此null值会抛出NullPointerException.
有两种可能的解决方案。您可以使用原始版本(例如anyDouble()),也可以使用接受 a 的版本Class(例如any(Double.class))。在后一种情况下,由于我们向方法提供类型信息,因此可以使用此信息返回合理的非空值(例如0.0D,在 double 的情况下)。