4 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
嘗試thenAnswer代替thenReturn:
Answer<Stream> answer = new Answer<Stream>() {
public Stream answer(InvocationOnMock invocation) throws Throwable {
return Stream.of("A", "B");
}
};
when(mock.streamMethod()).thenAnswer(answer);
現(xiàn)在將為每次調(diào)用創(chuàng)建一個(gè)新的 Stream streamMethod。
進(jìn)一步閱讀:
這是我在 Mockito中寫的一篇關(guān)于動(dòng)態(tài)回答的文章,可能是互補(bǔ)的。

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
您不是在模擬 Stream,而是在創(chuàng)建一個(gè) - 而且只有一個(gè),它將在調(diào)用第一個(gè)終止方法后被消耗,這就是您所經(jīng)歷的。
在大多數(shù)情況下,最好盡可能堅(jiān)持嘲笑,就您而言
MyStreamClass mock = mock(MyStreamClass.class);
Stream mockStream = mock(Stream.class);
when(mock.streamMethod()).thenReturn(mockStream);
這應(yīng)該足以測試所有客戶端MyStreamClass- 從流中獲取實(shí)際結(jié)果是沒有意義的。
如果這不適合您的設(shè)計(jì),您也可以使用Answer:
when(mock.streamMethod()).then(i -> Stream.of("A", "B"));
這將導(dǎo)致每次調(diào)用該方法時(shí)都會(huì)創(chuàng)建流。
或者,您可以使用 模擬多個(gè)調(diào)用thenReturn()。
when(mock.streamMethod()).thenReturn(Stream.of("A", "B"), Stream.of("A", "B"));
這將持續(xù)你 2 個(gè)電話。

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
嘗試 thenAnswer 使用 Java 8 方法
when(mock.streamMethod()).thenAnswer(invocation -> Stream.of("A", "B"))

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊
嘗試這個(gè):
MyStreamClass mock = Mockito.mock(MyStreamClass.class);
Mockito.when(mock.streamMethod()).thenReturn(Stream.of("A", "B"));
Stream s = mock.streamMethod();
s.forEach(System.out::println);
添加回答
舉報(bào)