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

Mockito如何处理Supplier?为何两种场景均调用Long类型Supplier?

截图内容

测试类截图
待测试服务代码截图
第一张截图为测试类,该类标注有@ExtendWith({MockitoExtension.class})注解,待测试的服务同时标注了@InjectMocks注解;第二张截图为待测试的服务代码。


问题解答

Mockito统一使用long类型的Supplier主要有4个核心原因:

  • 统一数值类型处理逻辑:Long类型可以兼容所有更小的整型(int、short、byte等),自动拆装箱过程中不会出现类型转换异常,Mockito不用为每一种基本整型单独开发Supplier实现,大幅减少重复代码,维护成本更低。
  • 实现懒求值优化:Supplier是函数式接口,只有当mock方法被实际调用时才会计算返回值。如果配置了动态返回规则(比如每次调用返回值自增、根据入参动态计算结果),用Supplier封装可以避免提前计算造成的资源浪费。
  • 统一打桩逻辑链路:不管你是用thenReturn设置固定返回值,还是用thenAnswer设置动态返回逻辑,Mockito内部都会把返回逻辑封装成Supplier处理,固定值和动态值走同一套处理链路,不会出现不同配置方式的兼容问题。
  • 规避基本类型默认值的排查坑:如果直接用long基本类型作为返回值,未打桩的mock方法会默认返回0,很多时候开发者无法判断是打桩没生效还是逻辑确实返回0,用Supplier封装后,Mockito可以在返回值输出前检查打桩配置,没有匹配的打桩规则时可以触发默认策略(比如返回null、抛出未Stubbed异常),更方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:42:03