Java 如何使用Mockito模拟带参数的答案
我正在使用Retrier类重试失败的任务。我的代码看起来像这样。我在测试用例中使用Mockito模拟了Retrier类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(),
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
)的类。检查此主题以获得示例。