如果在递归调用中多次调用模拟,我可以让模拟返回不同的值吗?



我在测试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;
});

有关该功能的更多信息。

相关内容

  • 没有找到相关文章

最新更新