Java 如何使用Mockito模拟带参数的答案

Java 如何使用Mockito模拟带参数的答案,java,mockito,Java,Mockito,我正在使用Retrier类重试失败的任务。我的代码看起来像这样。我在测试用例中使用Mockito模拟了Retrier类 someMethod() { Callable a = new TestingCall() Retrier.call(a, arg2, arg3) ..... } 我的测试代码看起来像这样 testMymethod() // mock(Retrier.class) when(Retrier.call(any(Callable.class), anyObject(),

我正在使用Retrier类重试失败的任务。我的代码看起来像这样。我在测试用例中使用Mockito模拟了Retrier类

someMethod() {
 Callable a = new TestingCall()
 Retrier.call(a, arg2, arg3)
 .....
}
我的测试代码看起来像这样

testMymethod()
 // mock(Retrier.class)
 when(Retrier.call(any(Callable.class), anyObject(), anyObject()).thenAnswer(new  Answer<Boolean>() {
@Override
    public Boolean answer(InvocationOnMock invocation) throws Throwable {
      return true;
    }
});
testMymethod()
//mock(Retrier.class)
当(Retrier.call(any(Callable.class)、anyObject()、anyObject())。然后回答(new Answer()){
@凌驾
公共布尔应答(invocationMock调用)抛出可丢弃的{
返回true;
}
});
但是当我运行测试时,它在Retrier.call中抛出一个空指针异常

Retrier.call使用传递的参数,该参数为null,因此为NPE

注意:我也尝试过这样的传球

当(Retrier.call)(any(Callable.class)、any(arg2.class), arg2和arg3也被模拟的任何(arg3.Class)


关于这个错误有什么想法吗?或者有其他成功的方法吗?

为了模拟静态方法,您需要使用Mockito:

如果
Retrier.call
是静态调用,这不起作用,因为Mockito不使用静态。还有什么是
arg2.Class
(类上大写的C?)这是一个错误。它是.Class(小写)。它是静态的。如果我将其更改为非静态,这会起作用吗?如果不是,替代解决方案是什么?您应该发布整个类(Retrier和带有
someMethod
)的类。检查此主题以获得示例。