【发布时间】:2016-01-15 19:36:24
【问题描述】:
比较 Java 8 中的两个 Stream 实例并确定它们是否具有相同的元素(特别是用于单元测试)的好方法是什么?
我现在得到的是:
@Test
void testSomething() {
Stream<Integer> expected;
Stream<Integer> thingUnderTest;
// (...)
Assert.assertArrayEquals(expected.toArray(), thingUnderTest.toArray());
}
或者:
Assert.assertEquals(
expected.collect(Collectors.toList()),
thingUnderTest.collect(Collectors.toList()));
但这意味着我正在构建两个集合并丢弃它们。考虑到我的测试流的大小,这不是性能问题,但我想知道是否存在比较两个流的规范方法。
【问题讨论】:
-
我很确定没有办法不将流强制转换为集合或数组,就像您在上面所做的那样。
-
向每个人请求一个
iterator(),然后同步遍历它们。 -
顺便说一句,这出现在 Streams 本身的测试框架中。我们指定了 18 种遍历模式(还有更多,这些是我们测试过的)并一直遍历“相同”的流,并比较结果是否相同(流库语义允许的模重排序。)参见,例如, hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/test/java/….
-
@BrianGoetz 枚举常量作为测试用例!?
标签: java junit java-8 java-stream