2017-09-14 56 views
1

是否有可能使用mockito中的when-return來返回不同的類型。Mockito:嘲笑並返回不同類型的值

我的功能

m.findDocument(id) 

返回基於id這我轉換爲字符串作進一步處理的文件。 但是,爲了測試我從一個id文件中獲取字符串。因此,有效地我想被返回的字符串時,函數被調用象下面這樣:

​​

因爲,一個是文件型,其他的字符串,是那裏的Mockito辦法,我可以這樣做?

感謝

回答

1

事情是:使用模擬框架不會改變Java語言。

當一個方法的簽名是public Foo bar() - 調用嘲笑對象bar()那麼即使,該方法必須返回美孚的一個實例。您不能使用模擬來靜默地更改方法的聲明返回類型。

當然但是,你可以這樣做:

Document mockedDocument = mock(Document.class); 
DocumentFinder mockedFinder = mock(DocumentFinder); 

when(mockedFinder.findDocument(id)).thenReturn(mockedDocument); 
when(mockedDocument.getSomeInfo()).thenReturn("that string"); 

但請注意:你只模擬該文檔實例的情況下,你不能用一個「真實」的文檔實例。你的目標應該是只有使用嘲諷,如果不處理嘲笑是不可能/太難的。

0

號取決於是否使用時+ thenReturn或doReturn/doAnswer,你要麼得到一個編譯錯誤或一個ClassCastException。

你可以做的是從方法中返回一個模擬文檔,然後在模擬「轉換」時返回測試字符串。

+0

謝謝。第二部分似乎令人困惑! – AYa