java - 如何对 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()
有人可以告诉我原因吗?
解决方案
试试下面的代码:-
when(mergeUtility.mergeJson(Mockito.any(), Mockito.any())).thenReturn( new
JsonParser().parse(MergeConstant.mergedJsonObject).getAsJsonObject());
其背后的原因是虽然您正在模拟该方法,但是您发送的参数与josnObj1, jsonObj2
执行测试用例时 jsonList 生成的对象不同,因此当您对列表生成的项目和josnObj1, jsonObj2
它们执行相等操作时将不匹配。由于对象不匹配,因此方法调用与您已模拟的对象不匹配,因此不执行模拟。
而当您使用Mockito.any()
它时,它会模拟该方法,而不管为该方法提供的参数如何,即使它们不匹配。
推荐阅读
- c# - radgridview (telerik winforms) 接受数字
- .net - 无服务器:在部署之前运行测试
- python-3.x - Python网络抓取文本,垂直打印
- r - Unix 运行命令没有为 R 脚本生成日志
- python - keras Tokenizer 在整个数据帧上的使用
- backup - 我可以从备份 DAT 文件中恢复设置密钥吗?
- python - 在自动地图上定义关系的问题
- node.js - 在 Electron 应用程序中运行多个 nodejs 服务器
- node.js - 没有从 react.js 调用 Express API
- r - 非 equi 连接不保留原始列值