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);
添加回答
举报