为了账号安全,请及时绑定邮箱和手机立即绑定

Mock 链调用涉及 Java 中的 Stream

Mock 链调用涉及 Java 中的 Stream

GCT1015 2021-06-29 12:57:52
如何使用流模拟链式调用,。还要注意,它调用 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());
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

你没有。

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

换句话说,你的测试本质上应该是这样的:

assertThat(someMethodDoingTheStreamOperation(yourInputList), is(expectedResult));

模拟容器,例如 List 或 Map 是(几乎总是)错误的。

如果您仍然坚持这样做,您可以使用 Mockito 及其深层存根支持。

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

您总是喜欢依赖于模拟的测试。当谈论列表时,嘿:用准备好的输入填充列表,而不是嘲笑列表。


查看完整回答
反对 回复 2021-07-07
  • 1 回答
  • 0 关注
  • 385 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信