首页 > 解决方案 > 如何对 Stream.reduce 方法进行单元测试

问题描述

我需要单元测试reduce()方法。不确定它为什么会抛出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()有人可以告诉我原因吗?

标签: javajunitmockitojava-stream

解决方案


试试下面的代码:-

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

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

而当您使用Mockito.any()它时,它会模拟该方法,而不管为该方法提供的参数如何,即使它们不匹配。


推荐阅读