Mockito:迭代列表时如何获取模拟对象?

Goo*_*uck 3 mockito

@Mock
Object obj;

List<Obejct obj> objs;
Run Code Online (Sandbox Code Playgroud)

当我迭代时如何获取模拟对象 obj objs

小智 6

代码:

@Mock
private Iterator<YourObject> iteratorMock;
//...
when(yourListMock.iterator()).thenReturn(iteratorMock);
when(iteratorMock.hasNext()).thenReturn(Boolean.TRUE, Boolean.TRUE,
    Boolean.TRUE, Boolean.FALSE);
when(iteratorMock.next()).thenReturn(yourMock1, yourMock1, yourMock2);
Run Code Online (Sandbox Code Playgroud)

正如您在代码中看到的,模拟迭代器是为第二次、第三次等调用返回不同模拟的一种非常方便的方法。

这样,您还可以很容易地让第二个调用抛出异常,而第三个调用再次工作,例如能够测试第二个调用的异常是否会被处理,而第三个结果仍然会被处理。

使用真实列表是一种选择,但我认为模拟更强大,并且代码更浓缩到您实际需要的特定测试。