2014-01-29 70 views
0
@Mock 
Object obj; 

List<Obejct obj> objs; 

如何获取模拟对象obj当我迭代objsMockito:如何在迭代列表时获取模拟对象?

+0

看看[这篇文章](http://whyjava.wordpress.com/2012/03/11/quick-tip-on-mockito-mocking-iterator/) – eebbesen

+0

除非你有一个特定的原因,不要使用一个真正的'List'(例如它在一个小单元测试中必然很大),使用一个真正的'List'并添加模拟对象。 Java集合定义良好,经过良好测试,因此您不应该嘲笑它们。 –

+0

该答案也非常有用https://stackoverflow.com/a/43067304/3800377 –

回答

1

代码:

@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); 

正如你可以在代码中看到,嘲讽的迭代器是为第二,第三,e.t.c调用返回不同的嘲弄一个非常方便的方式。

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

使用真正的列表是一个选项,但我认为嘲笑更强大,代码更紧密地针对您实际需要的特定测试。