You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级项目后findOne(predicate2).orElse(null)编译空指针问题求助

解决Mockito链式调用引发的空指针问题
  • 问题本质:你现在在when()里链式调用了.orElse(null),但Mockito的when()无法处理这种链式操作——因为getUserRepository().findOne(predicate2)如果没被正确mock,会返回null,调用null.orElse(null)直接触发空指针。而且升级后findOne的返回值应该改成了Optional<UserBO>,不再直接返回实体对象,这是核心变化。

  • 正确写法:
    不需要mockorElse方法,直接mockfindOne返回包含目标对象的Optional即可:

    when(getUserRepository().findOne(predicate2)).thenReturn(Optional.of(userBO));
    

    这样业务代码里调用findOne(predicate2).orElse(null)时,会自动取出userBO,完全符合预期。

  • 特殊场景处理:如果需要模拟findOne找不到数据的情况,让它返回空Optional就行:

    when(getUserRepository().findOne(predicate2)).thenReturn(Optional.empty());
    

    此时orElse(null)会返回null,和业务逻辑一致。

内容的提问来源于stack exchange,提问作者rob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 18:59:56