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"
发布于 2019-06-20 08:00:39
或者使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(...);
(实际上,它不一定是匿名类,它可以是任何类型的类。使用匿名类非常方便,因为它将所有内容都本地化到要使用的位置。)
https://stackoverflow.com/questions/56677335
复制相似问题