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

Mockito模拟返回Optional的方法为何返回Optional.empty?无对应代码路径

问题原因解析

这是因为你用Mockito创建的mock对象完全替代了原类A的实现,原类call方法里的逻辑根本不会被执行。

Mockito对mock对象未设置存根(stub)的方法调用,会返回对应类型的默认值:

  • 对于普通引用类型,默认返回null
  • 对于Optional这类容器类型,Mockito专门设置了默认返回Optional.empty()

你只给a.call(1)和a.call(2)配置了返回值,当调用a.call(3)时,因为没有对应的存根规则,Mockito就返回了Optional类型的默认值Optional.empty()。

如果想让未配置的调用也走原类逻辑,你应该用spy对象而非mock对象,修改方式如下:

// 用spy替代mock,保留原类逻辑
final var a = Mockito.spy(new A());
Mockito.when(a.call(1)).thenReturn(Optional.of(1L));
Mockito.when(a.call(2)).thenReturn(Optional.of(2L));

var test1 = a.call(1); // Optional[1]
var test2 = a.call(2); // Optional[2]
var test3 = a.call(3); // Optional[6],走原类逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:09:50