如何确保模拟对象在mockito中只调用一次

ank*_*kit 4 java loops mocking mockito

我有一个while循环如下

while (nodeIterator.hasNext())
Run Code Online (Sandbox Code Playgroud)

我已经模拟了这个方法hasNext返回true,以便我可以在while循环中测试代码但现在问题是每次它返回true并且这个循环永远不会结束.请告诉我,无论如何我可以确保只调用一次这个方法,如果没有,那么在第一次执行后如何返回false

ank*_*kit 11

我得到了答案,我们可以通过以下方式做到这一点

when(nodeIterator.hasNext()).thenReturn(true).thenReturn(false);
Run Code Online (Sandbox Code Playgroud)

这被称为方法存根.同样,如果要调用它两次然后想要返回false,则执行以下操作

when(nodeIterator.hasNext()).thenReturn(true).thenReturn(true).thenReturn(false);
Run Code Online (Sandbox Code Playgroud)


Max*_*ann 6

OngoingStubbing.thenReturn(T,T...)

通过这种方式,您可以返回一系列调用的值。

when(nodeIterator.hasNext()).thenReturn(true,false);
Run Code Online (Sandbox Code Playgroud)

以上在第一次调用时返回 true,在每次后续调用时返回 false。