有没有办法在mockito的thenReturn函数中枚举列表中的项,以便返回列表中的每一项?到目前为止,我已经完成了以下操作:
List<Foo> returns = new ArrayList<Foo>();
//populate returns list
Mockito.when( /* some function is called */ ).thenReturn(returns.get(0), returns.get(1), returns.get(2), returns.get(3));
每次函数被调用时,它都会从列表中返回一个不同的对象,例如get(1)
,get(2)
等。
但我想简化这个过程,使它对任何大小的列表都更动态,以防我有一个大小为100的列表。我尝试了这样的方法:
Mockito.when( /* some function is called */ ).thenReturn(
for(Foo foo : returns) {
return foo;
}
);
我也试过这个:
Mockito.when(service.findFinancialInstrumentById(eq(1L))).thenReturn(
for (int i=0; i<returns.size(); i++) {
returns.get(i);
}
);
但是这不起作用...那么我如何在thenReturn
中枚举这个列表...我遇到过其他类似then
或answer
的方法,但是我不确定哪一个在这种情况下最好。
3条答案
按热度按时间vshtjzan1#
thenReturn()方法签名为
所以它接受一个T的示例,后面跟着一个vararg T...,这是数组的语法糖。
但是一个更干净的解决方案是创建一个Answer实现,它接受一个List作为参数,并在每次使用它时回答列表的下一个元素。
例如:
sr4lhrrt2#
另一种方法(但就我个人而言,我更喜欢JB Nizet SequenceAnswer的想法),会是这样的...
yiytaume3#
我知道最初的问题特别要求使用
.thenReturn()
,但如果您可以使用.thenAnswer()
,mockito有一个AdditionalAnswers.returnsElementsOf()
在此主题https://stackoverflow.com/a/25013072/5556125中找到答案