我需要知道如何模拟使用 .collect(java 8( 方法的方法,下面是方法
//return data
public String getData(List<Node> nodes)
{
return nodes.stream().map(node->
getService().compare(new Reference()).collect(Collectors.joining(~));
}
protected getService()
{
return service;
}
我可以像这样模拟服务
@Mock //mocking service
Service service
现在我该如何模拟
getService().compare(new Reference()).collect(Collectors.joining(~));
比较方法返回比较引用对象。我可以使用PowerMock。
在您的情况下,我建议您模拟compare()
方法,而不是collect()
。
因为您使用流,所以您可能有一些节点。要模拟具有相同Reference
对象的乘法调用compare()
的行为,您可以尝试以下变体:
final CompareRef expectedCompareRef1 = new CompareRef();
final CompareRef expectedCompareRef2 = new CompareRef();
final CompareRef expectedCompareRef3 = new CompareRef();
when(service.compare(eq(new Reference())).thenReturn(expectedCompareRef1).thenReturn(expectedCompareRef2).thenReturn(expectedCompareRef3);
然后调用你getData()
方法:
final List<Nodes> givenNodes = new ArrayList<>();
givenNodes.add(node1);
givenNodes.add(node2);
givenNodes.add(node3);
final String actualResult = myInstance.getData(givenNodes);
Assert.assertEquals("TODO: expectedResult", actualResult);
因此,流将收集所有测试expectedCompareRefN
对象。
请注意,要eq(new Reference())
工作,您的Reference
类应实现equals/hashCode
方法。否则eq(new Reference())
始终为 false,thenReturn
将不会返回指定的预期对象。