我在测试f1
中有一个递归函数。f1
调用我正在嘲笑的数据库服务。
def f1 {
result = databaseservicecall(arg); //mocking this
add result to accumulator
exit recursion if some condition is met else call f1 again.
}
我希望databaseserviecall
返回在第一次调用时说r1
,在第二次调用中r2
,累加器应该有r1+r2
.或者,如果我能测试databaseservicecall
被调用了 2 次并且它被传递了arg1
次,arg2
作为参数,我也可以。
是否可以在mockito
做到这一点?我以为我可以使用spy
但我没有真正的databaseservicecall
实现。
您可以连接then ()
调用。
when(sut.databaseservicecall(any()))
.then(r1)
.then(r2) ;
利用thenAnswer
功能(如果您正在使用间谍,则doAnswer
):
Integer invocationCount = Integer.valueOf(0);
when(sut.databaseservicecall(any(Argument.class))).thenAnswer((invocation) ->{
invocationCount++;
if(invocationCount == 1) return r1;
if(invocationCount == 2) return r2;
if(...)
return null;
});
有关该功能的更多信息。