使用 Mockito 时,您可以 stub 方法调用,例如:
when(mock.someMethod("some arg"))
.thenThrow(new RuntimeException())
.thenReturn("foo");
但是当您的方法返回 void
时,您需要使用以下格式进行 stub :
doAnswer(new Answer() {..).when(mock). someMethod("some arg");
假设我有一个像这样的Worker.class
class Worker {
void doWork(Callback callback) {
boolean success= ...;
if(success){
callback.onSuccess();
}else {
callback.onFail();
}
}
}
您可以使用以下代码对调用进行 stub :
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Callback callback= invocation.getArguments()[0];
callback.onSuccess();
return null;
}
}).when(mockWorker).doWork(any(Callback.class));
现在假设我想对工作线程的三个连续调用进行 stub 以调用 onFail、onSuccess、onFail
我该怎么做?我是否需要在每个 answer(InitationOnMock incall)
调用中重新配置模拟?
最佳答案
好吧找到了答案。您只需将调用链接到 doAnswer,如下所示:
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Callback callback= invocation.getArguments()[0];
callback.onFail();
return null;
}
}).
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Callback callback= invocation.getArguments()[0];
callback.onSuccess();
return null;
}
}).
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Callback callback= invocation.getArguments()[0];
callback.onFail();
return null;
}
}).when(mockWorker).doWork(any(Callback.class));
关于java - 如何在mockito中使用回调来 stub 连续调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40739696/