我需要对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()
方法中抛出。有人可以让我知道原因吗?
答案 0 :(得分:3)
请尝试以下代码:-
when(mergeUtility.mergeJson(Mockito.any(), Mockito.any())).thenReturn( new
JsonParser().parse(MergeConstant.mergedJsonObject).getAsJsonObject());
其背后的原因是尽管您正在模拟方法,但是正在发送
参数josnObj1, jsonObj2
与在执行测试用例时由jsonList生成的对象不同,因此,当对列表和josnObj1, jsonObj2
生成的项目执行相等操作时,它们将不匹配。对象不匹配,方法调用与您模拟的对象不匹配,因此不会执行模拟。
当您使用Mockito.any()
时,即使它们不匹配,它也会模拟该方法,而与给该方法的参数无关。