如何对Stream.reduce方法进行单元测试

时间:2019-10-21 07:53:35

标签: java junit mockito java-stream

我需要对reduce()方法进行单元测试。尽管我可以看到该对象不为null,但不确定为什么它会抛出NullPointerException

请参考以下代码。

  Mock:-
  when(mergeUtility.mergeJson(josnObj1, jsonObj2)).thenReturn( new
  JsonParser().parse(MergeConstant.mergedJsonObject).getAsJsonObject());

实际方法:

Optional<JsonObject> aggregatedJson = 
     jsonList.stream().reduce(mergeUtility :: mergeJson);

当我测试jsonList必须对象时,NullPointerException仍然从reduce()方法中抛出。有人可以让我知道原因吗?

1 个答案:

答案 0 :(得分:3)

请尝试以下代码:-

 when(mergeUtility.mergeJson(Mockito.any(), Mockito.any())).thenReturn( new
  JsonParser().parse(MergeConstant.mergedJsonObject).getAsJsonObject());

其背后的原因是尽管您正在模拟方法,但是正在发送 参数josnObj1, jsonObj2与在执行测试用例时由jsonList生成的对象不同,因此,当对列表和josnObj1, jsonObj2生成的项目执行相等操作时,它们将不匹配。对象不匹配,方法调用与您模拟的对象不匹配,因此不会执行模拟。

当您使用Mockito.any()时,即使它们不匹配,它也会模拟该方法,而与给该方法的参数无关。