如何在Mockito中使用回调对连续调用进行存根

阿德夫

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

现在想像一下,我想对工作人员连续进行三个呼叫,以进行呼叫onFail, onSuccess, onFail该怎么做?我需要在每个answer(InvocationOnMock invocation)调用中重新配置模拟吗?

阿德夫

奥基找到了答案。您只需要像下面这样链接对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));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章