2014-01-29 22 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調用返回不同的嘲弄一個非常方便的方式。

這樣你也可以很容易地讓第二次調用拋出異常,第三次調用再次工作,能夠測試第二次調用的異常將被處理,例如第三次結果仍然會被處理。

使用真正的列表是一個選項,但我認爲嘲笑更強大,代碼更緊密地針對您實際需要的特定測試。