4 回答

TA貢獻1828條經驗 獲得超3個贊
嘗試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);
現在將為每次調用創建一個新的 Stream streamMethod。
進一步閱讀:
這是我在 Mockito中寫的一篇關于動態回答的文章,可能是互補的。

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

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

TA貢獻1842條經驗 獲得超22個贊
嘗試這個:
MyStreamClass mock = Mockito.mock(MyStreamClass.class);
Mockito.when(mock.streamMethod()).thenReturn(Stream.of("A", "B"));
Stream s = mock.streamMethod();
s.forEach(System.out::println);
添加回答
舉報