Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在mockito中使用回调存根连续调用_Java_Android_Unit Testing_Mockito - Fatal编程技术网

Java 如何在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

使用Mockito时,您可以存根方法调用,如:

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));