我在Kotlin用Mockito检查列表是否正确分页
我用这个密码
logic.searchItems(filter)
verify(vm).setItems(all.subList(0, 10), true)
logic.loadNext()
verify(vm).setItems(all.subList(0, 20), true) (1)
logic.loadNext()
verify(vm).setItems(all.subList(0, 30), true) (2)
理论上这应该可以工作,但是我在(1)和(2)中得到了太多的调用异常。
如果我使用times(1)in(1)和times(2)in(2),则测试通过。但是我想验证这个方法是用那些特定的参数调用的。
这能和莫基托一起做吗?
最佳答案
对于这种参数,作为一个具有特定内容的集合,我建议使用ArgumentCaptor
特性。因此,您将能够捕获传递的参数,并在以后使用诸如hamcrest或assertj之类的工具来断言它们的值/状态:
final ArgumentCaptor<List> captorListOne = ArgumentCaptor.forClass(List.class);
final ArgumentCaptor<List> captorListTwo = ArgumentCaptor.forClass(List.class);
final ArgumentCaptor<List> captorListThree = ArgumentCaptor.forClass(List.class);
verify(vm).setItems(captorListOne.capture(), true)
logic.loadNext()
verify(vm).setItems(captorListTwo.capture(), true)
logic.loadNext()
verify(vm).setItems(captorListThree.capture(), true)
List listToAssert = captorListOne.getValue();
...
更多ArgumentCaptor