如何模拟.collect方法PowerMock Junit

时间:2018-01-26 17:15:50

标签: junit powermock

我需要知道如何模拟使用.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(~)); 

Compare方法返回CompareRef对象。我可以使用PowerMock。

1 个答案:

答案 0 :(得分:0)

在你的情况下,我建议模仿compare()方法,而不是collect()

因为您使用流,所以可能有一些节点。要使用compare()Reference对象进行多次调用来模拟行为,您可以尝试使用此变体:

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将不返回指定的预期对象。