java - 如何在mockito中使用回调来 stub 连续调用

标签 java android unit-testing mockito

使用 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/

相关文章:

javascript - 如何将模拟服务注入(inject)过滤器的单元测试?

java - 正确设计 Java 类

java - SimpleDateFormat getHours() 返回错误值

java - 具有多模块项目的 JUnit 类别 - 无法加载类别

android - 错误 : "Program type already present: androidx.versionedparcelable.CustomVersionedParcelable"

Android caffe Forward Prefilled() 在多线程对象中不起作用

php - 如何在 Symfony2 中测试响应头?

java - 创建记录器 java 时未调用构造函数

java - 在java中实现分页的最佳方式

java - 输出不符合预期 - 零息债券计算器