模拟链调用涉及 Java 中的 Stream
Mock chain calls involves Stream in Java
如何使用流模拟链式调用。另请注意,它调用 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());
你不知道。
这只是经典的 "input/output" 测试。您只是想创建一个包含特定对象的 input 列表,以便您可以 预测 该操作应该产生什么。
换句话说,您的测试本质上应该如下所示:
assertThat(someMethodDoingTheStreamOperation(yourInputList), is(expectedResult));
Mocking 容器,例如 List 或 Map 是(几乎总是)错误的。
如果您仍然坚持这样做,您可能正在使用 Mockito 及其 deep stubs 支持。
但同样:这意味着您开始将解决方案的实现细节放入您的测试代码中。这意味着您的测试代码不过是生产代码的 "copy"。当您更改生产代码时,您的单元测试可能会中断。因此,即使是简单的重构也可能成为问题。
您总是喜欢而不是依赖模拟的测试。在谈论列表时,嘿:用准备好的输入填充列表,而不是模拟列表。
如何使用流模拟链式调用。另请注意,它调用 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());
你不知道。
这只是经典的 "input/output" 测试。您只是想创建一个包含特定对象的 input 列表,以便您可以 预测 该操作应该产生什么。
换句话说,您的测试本质上应该如下所示:
assertThat(someMethodDoingTheStreamOperation(yourInputList), is(expectedResult));
Mocking 容器,例如 List 或 Map 是(几乎总是)错误的。
如果您仍然坚持这样做,您可能正在使用 Mockito 及其 deep stubs 支持。
但同样:这意味着您开始将解决方案的实现细节放入您的测试代码中。这意味着您的测试代码不过是生产代码的 "copy"。当您更改生产代码时,您的单元测试可能会中断。因此,即使是简单的重构也可能成为问题。
您总是喜欢而不是依赖模拟的测试。在谈论列表时,嘿:用准备好的输入填充列表,而不是模拟列表。