Unit testing 流已在Mockito中运行或关闭?

Unit testing 流已在Mockito中运行或关闭?,unit-testing,exception,java-8,mockito,java-stream,Unit Testing,Exception,Java 8,Mockito,Java Stream,我想测试一个返回流的方法 class Foo { public void getClicks(boolean somecondition) { Stream s1 = computeAndGetAllClicks(new Date()); if (somecondition) { Stream s2 = computeAndGetAllClicks(new Date()); } return Stre

我想测试一个返回流的方法

class Foo {
    public void getClicks(boolean somecondition) {
        Stream s1 = computeAndGetAllClicks(new Date());
        if (somecondition) {
            Stream s2 = computeAndGetAllClicks(new Date());
        }
        return Stream.concat(s1, s2);
    }

    Stream computeAndGetAllClicks(Date d) {
        // return stream
    }
}
现在我为somecondition=true的情况编写了以下测试

    final ArgumentCaptor<Date> argumentCaptorTodayDate = ArgumentCaptor.forClass(Date.class);

    doReturn(Arrays.asList(new Click.Builder().build()).stream())
    .when(fooInstance)
    .addAtlasLineItem(computeAndGetAllClicks(argumentCaptorTodayDate.capture))

   final ArgumentCaptor<Date> argumentCaptorEndDate = ArgumentCaptor.forClass(Date.class);


    doReturn(Arrays.asList(new Click.Builder().build()).stream())
    .when(fooInstance)
    .addAtlasLineItem(computeAndGetAllClicks(argumentCaptorEndDate.capture))

    fooInstance.getClicks(true);
final ArgumentCaptor argumentCaptorTodayDate=ArgumentCaptor.forClass(Date.class);
doReturn(Arrays.asList(新建Click.Builder().build()).stream())
.when(实例)
.addAtlasLineItem(computeAndGetAllClicks(argumentCaptorTodayDate.capture))
最终ArgumentCaptor argumentCaptorEndDate=ArgumentCaptor.forClass(Date.class);
doReturn(Arrays.asList(新建Click.Builder().build()).stream())
.when(实例)
.addAtlasLineItem(computeAndGetAllClicks(argumentCaptorEndDate.capture))
fooInstance.getClicks(true);
然而,我得到了异常:java.lang.IllegalStateException:流已经被操作或关闭


如何绕过它???

每次调用时,您都可以使用Answer并创建新流:

doAnswer(invocationOnMock->Arrays.asList(new Click.Builder().build()).stream())

这个名为
s
的流来自哪里?这个
getClicks
方法永远无法编译。除此之外,问题是显而易见的。当您使用Mockito强制方法在每次调用时返回相同的流时,它将破坏任何希望它在每次调用时返回新流的方法。这是一个极好的解决方案。为甚么不接受呢?