java - Mock链调用涉及Java中的Stream
问题描述
如何使用流模拟链接调用,。另请注意,它调用 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());
解决方案
你没有。
这只是经典的“输入/输出”测试。您只是想创建一个包含特定对象的输入列表,以便您可以预测该操作会产生什么结果。
换句话说,您的测试本质上应该如下所示:
assertThat(someMethodDoingTheStreamOperation(yourInputList), is(expectedResult));
模拟容器,例如 List 或 Map (几乎总是)是错误的。
如果您仍然坚持这样做,您可能正在使用 Mockito 及其深层存根支持。
但同样:这意味着您开始将解决方案的实现细节放入测试代码中。这意味着您的测试代码只不过是生产代码的“副本”。第二次更改生产代码,您的单元测试可能会中断。因此,即使是简单的重构也可能成为问题。
你总是喜欢不依赖于模拟的测试。在谈论列表时,嘿:用准备好的输入填充列表,而不是模拟列表。
推荐阅读
- python - Django:不能分配必须是一个实例
- php - PHP使用password_verify和password_hash验证密码
- r - 如何删除一行和一列
- java - 如何从远程机器访问 apache mina ssh 服务器?
- python - 计算两个相邻城市之间的距离
- opencv - OpenCV 4.0:类“cv::FastFeatureDetector”没有成员“DetectorType”
- javascript - setInterval 计数器问题
- sql - Notepad ++替换整个字符串,但其中的整数除外
- python - 将“for循环”更改为“while循环”
- python - python子进程不工作。它没有取代可变输出