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

为何Mockito.when直接传参与使用eq()参数匹配时行为不一致

两种写法行为差异的原因

这是由 Mockito 内置的参数匹配规则直接导致的:

  • Mockito 对打桩(when(...) 语句)的参数匹配有明确约束:同一条打桩语句的所有参数,要么全部用字面量做等值匹配,要么全部显式使用参数匹配器,不能混合使用。
  • 如果你在当前测试类的任意其他打桩逻辑中,曾经混合使用过字面量和参数匹配器(比如 anyString()、anyInt() 这类),就会打乱 Mockito 的全局参数匹配状态,后续所有打桩语句如果直接使用字面量传参,都会出现匹配失效的问题。此时 Mockito 匹配不到预设的打桩规则,就会返回对应类型的默认值,引用类型默认返回 null,这就是你直接传 "String1" 时返回 null 的核心原因。
  • eq("String1") 属于显式声明的参数匹配器,作用是强制按照参数的 equals() 结果匹配内容相等,不受之前匹配状态错乱的影响,能正确命中你预设的打桩规则,因此可以正常返回 anObject。

你可以通过 mock 对象配置的 verboseLogging() 日志输出,查看 mock 对象的匹配过程,确认调用时的参数和打桩规则是否匹配成功。

内容的提问来源于stack exchange,提问作者Nico S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:27:05