Stream
在Java 8中比较两个实例并找出它们是否具有相同的元素,特别是用于单元测试的目的是什么?
我现在得到的是:
@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()));
但这意味着我正在构建两个集合并放弃它们。考虑到我的测试流的大小,这不是性能问题,但我想知道是否有一种比较两个流的规范方法。
发布于 2018-03-19 12:30:57
static void assertStreamEquals(Stream<?> s1, Stream<?> s2)
{
Iterator<?> iter1 = s1.iterator(), iter2 = s2.iterator();
while(iter1.hasNext() && iter2.hasNext())
assertEquals(iter1.next(), iter2.next());
assert !iter1.hasNext() && !iter2.hasNext();
}
发布于 2018-03-19 13:47:20
收集测试stream是执行测试的直接而有效的方式。您可以用最简单的方式创建预期结果列表,这可能不是收集stream。
另外,大多数库可以创建模拟合作者,人们可以嘲笑一个Consumer
“预计”一系列accept()
具有特定元素的调用。消耗了Stream
它,然后“verify”其配置的期望得到满足。
https://stackoverflow.com/questions/-100007666
复制相似问题