Java 如何在mockito中使用回调存根连续调用
使用Mockito时,您可以存根方法调用,如:Java 如何在mockito中使用回调存根连续调用,java,android,unit-testing,mockito,Java,Android,Unit Testing,Mockito,使用Mockito时,您可以存根方法调用,如: when(mock.someMethod("some arg")) .thenThrow(new RuntimeException()) .thenReturn("foo"); 但是当您的方法返回void时,您需要使用以下格式存根: doAnswer(new Answer() {..).when(mock). someMethod("some arg"); 假设我有一个像这样的Worker.class class Wor
when(mock.someMethod("some arg"))
.thenThrow(new RuntimeException())
.thenReturn("foo");
但是当您的方法返回void
时,您需要使用以下格式存根:
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();
}
}
}
您可以使用以下代码对调用进行存根:
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));
现在想象一下,我想将对worker的三个连续调用存根,以调用
onFail、onSuccess、onFail
我该怎么做?我是否需要在每个应答(invocationMock invocation)
调用中重新配置模拟?Okey找到了应答。您只需将呼叫链接到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));