如何模拟流中的链接调用。还要注意,它正在将each.getName()作为中间操作进行调用。 我无法创建SomeCountobject,因此也必须对其进行模拟。
Set<String> obj = new HashSet<String>();
List<SomeCount> someGroups = Some_Mocked_Implementation();
obj = someGroups.stream().map(each -> each.getName()).filter(each ->
userNames.indexOf(each) == -1)
.collect(Collectors.toSet());
答案 0 :(得分:3)
你没有。
这仅是经典的“输入/输出”测试。您只想创建一个包含特定对象的输入列表,以便您可以预测该操作应产生的结果。
换句话说,您的测试从本质上应该看起来像:
assertThat(someMethodDoingTheStreamOperation(yourInputList), is(expectedResult));
嘲笑容器(例如列表或地图)是(几乎总是)错误的。
如果您仍然坚持这样做,则可以使用Mockito及其deep stubs支持。
但是再次:这意味着您开始将解决方案的实施细节放入测试代码中。这意味着您的测试代码不过是生产代码的“副本”。更改生产代码的第二秒,单元测试可能会中断。因此,即使是简单的重构也可能会成为问题。
您始终希望拥有不依赖于模拟的测试。当谈论列表时,然后嘿:用准备好的输入填充列表,而不是模拟列表。