升级项目后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
相关产品推荐
相关产品推荐

