java - Mockito自调用doAnswer重复调用?

标签 java unit-testing mockito integration-testing

我使用mockito为相同的函数调用返回不同的值:

doAnswer(new Answer() {
  int counter = 0;

  @Override
  public Object answer(InvocationOnMock invocation) throws Throwable {
    if (counter == 0) {
        counter += 1;
      return object1;
    } else {
      return object2;
    }
  }
}).when(thing).thingFunction();

thingFunction 目前仅被调用一次,但是,在第一次调用时,mockito 开始一遍又一遍地自调用(3-5 次),从而增加该计数器。不知道为什么会发生这种情况。这是正确的吗?

最佳答案

除了语句中存在警告之外,您的代码应该是正确的,因为 Answer 是一个泛型类。你应该写new Answer<Object>() { //.. } (根据您的模拟方法的返回类型)

为了澄清,我用 Mockito 1.10.19 编写了一个 Junit 测试:

import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import static org.junit.Assert.*;

import org.junit.Test;

public class TestClass {


    Object object1 = new Object();
    Object object2 = new Object();

    class Thing{
        public Object thingFunction(){
            return null;
        }
    }

    @Test
    public void test(){
        Thing thing = Mockito.mock(Thing.class);
        Mockito.doAnswer(new Answer<Object>() {
              int counter = 0;

              @Override
              public Object answer(InvocationOnMock invocation) throws Throwable {
                if (counter == 0) {
                    counter += 1;
                  return object1;
                } else {
                  return object2;
                }
              }
            }).when(thing).thingFunction();

        assertEquals(object1, thing.thingFunction());
        assertEquals(object2, thing.thingFunction());
    }
}

关于java - Mockito自调用doAnswer重复调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51273197/

相关文章:

swift - Xcode Swift 单元测试输出过于冗长

unit-testing - 如何在 vscode 扩展单元测试中获取 extensionContext?

php - 如何使用 PHPUnit 测试调用同一类的其他方法但没有返回值的方法

java - Mockito - 验证集合中的对象是否调用方法

java - 如何收集递归方法的结果

java - 如何将日期和时间转换为用户时区

java - 解密在 Android 设备上加密的字符串

java - 如何顺序调用Servlet和Filter

java - 如何在 Mockito 中监视对象的情况下调用真实方法?

java - 使用 Mockito 进行 Spring Controller 测试,空指针异常