我有一个递归函数正在测试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
被调用两次并以arg1
和arg2
作为参数被传递,我也可以。
是否可以在mockito
中执行此操作?我以为我可以使用spy
,但没有真正的databaseservicecall
实现。
答案 0 :(得分:0)
利用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;
});
有关feature的更多信息。
答案 1 :(得分:0)
您可以串联then ()
个呼叫。
when(sut.databaseservicecall(any()))
.then(r1)
.then(r2) ;