int calledCnt = 0;
doAnswer(i -> {
    if (calledCnt == 0) {
        calledCnt += 1;
        throw new InternalServerErrorException("test");
    }
    return false;
}).when(myClass.someFunction(any()));


我想对一个调用进行存根,如果最初被调用会引发异常,但随后的所有调用都将返回false。

上面的电话抱怨"Variables used in lambda should be final or effectively final"

最佳答案

可以使calledCnt变得可变(例如,具有单个元素的int[]AtomicInteger),或者将答案声明为匿名类,这样就可以添加成员变量:

doAnswer(new Answer<Boolean>() {
  int calledCnt = 0;

  @Object public Boolean answer(InvocationOnMock invocation) {
    if (calledCnt == 0) {
      calledCnt += 1;
      throw new InternalServerErrorException("test");
    }
    return false;
  }
}).when(...);


(实际上,它不必是匿名类,它可以是任何种类的类。使用匿名类非常方便,因为它可以将所有内容本地化为将要使用的位置。)

09-26 08:22