【发布时间】:2018-10-29 12:25:01
【问题描述】:
我在函数中有一行代码将流操作应用于ArrayList:
List<Entity> list = xyz();
long result = list.stream().map(n -> n.getData()).filter(n -> n == 1).count();
现在,当我为此方法编写测试时,我应该这样做:
@Mock
private List<Entity> list;
//inside the test method
when(list.stream().map(any()).filter(any()).count()).thenReturn(someValue);
我想到的是,当我们在代码中调用流操作时,我们基本上是走出我们的类来调用这些函数。由于它是单元测试,我们应该留在我们的模块中。请澄清我是否有一些误解。如果我们不需要模拟List,那为什么呢?
【问题讨论】:
-
没有。你应该模拟 xyz()
-
是的,已经完成了。我真的只关心流操作。如果我们不需要模拟 List 那为什么?基本上我们要走出我们的模块。
-
嗯...不是吗?列表的流式传输都在该方法中。只是超出范围的 xyz() 调用
-
令我困惑的是 stream() 是
ArrayList的方法,而不是我们自己的类。这就是为什么我突然想到我们要下课了。 -
在这种情况下,String 也是另一个类,你会去模拟“test”.equals(value) 吗?如果您无法获得价值,您只需要模拟任何东西。你有列表的值,因为它是由 xyz() 返回的,所以不需要模拟任何东西。
标签: java unit-testing mockito junit4