模拟链调用涉及Java中的流

模拟链调用涉及Java中的流,java,junit,java-8,mockito,powermock,Java,Junit,Java 8,Mockito,Powermock,如何使用流模拟链接调用,。还要注意,它将调用每个.getName()作为中间操作。 我无法创建SomeCountobject,因此也必须模拟它 Set<String> obj = new HashSet<String>(); List<SomeCount> someGroups = Some_Mocked_Implementation(); obj = someGroups.stream().map(each -> each.getName()).fil

如何使用流模拟链接调用,。还要注意,它将调用每个.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());
Set obj=new HashSet();
列出一些组=一些模拟的实现();
obj=someGroups.stream().map(each->each.getName()).filter(each->
用户名.indexOf(每个)=-1)
.collect(收集器.toSet());
你没有

这只是经典的“输入/输出”测试。您只需创建一个包含特定对象的输入列表,以便预测该操作的结果

换句话说,您的测试本质上应该如下所示:

assertThat(someMethodDoingTheStreamOperation(yourInputList), is(expectedResult));
模拟容器,例如List或Map(几乎总是)是错误的

如果您仍然坚持这样做,您可以使用Mockito及其支持

但同样:这意味着您开始将解决方案的实现细节放入测试代码中。这意味着您的测试代码只是生产代码的“副本”。当您更改生产代码时,单元测试可能会中断。因此,即使是简单的重构也可能成为一个问题

你总是喜欢那些不依赖模仿的测试。当谈论列表时,嘿:用准备好的输入填充列表,而不是模仿列表