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

Java中使用Mockito模拟异常时遭遇InvalidUseOfMatchersException错误

Mockito InvalidUseOfMatchersException 问题解决

错误原因分析

你遇到的InvalidUseOfMatchersException核心问题有两点:

  1. mock行为定义顺序错误:Mockito要求必须先定义mock方法的行为(when语句),再执行触发该方法的业务代码(execute)。你当前代码先调用了execute,之后才设置when,此时execute已经执行完毕,mock规则未生效,还会导致匹配器计数混乱。
  2. 匹配器数量与方法参数不匹配:错误提示“2 matchers expected, 4 recorded”说明你用了4个参数匹配器,但Mockito预期的是2个,大概率是因为你匹配的titanQueryForListMap方法实际参数数量和你写的不一致(比如方法是2个参数,你却传了4个匹配器),或者误匹配了其他重载版本的方法。

修正代码示例

// 确保icctr009是Mockito创建的mock对象
ICCTR009 icctr009 = Mockito.mock(ICCTR009.class);

// 异常无需mock,直接实例化即可
TitanException e = new TitanException("模拟业务异常");

long bankId = 111L, productId = 220L, subproductId = 333L;

// 第一步:先定义mock方法的抛出异常行为
when(icctr009.titanQueryForListMap(anyString(), anyString(), anyString(), anyMap()))
      .thenThrow(e);

// 第二步:再调用触发方法
icctr009.execute(bankId, productId, subproductId);

额外排查点

  • 核对titanQueryForListMap方法的实际参数列表,确保匹配器数量和参数数量完全一致;如果是重载方法,可通过指定参数类型或使用eq()等匹配器明确匹配目标重载版本。
  • 确认icctr009是Mockito生成的mock或spy对象,普通实例无法使用when语法定义mock行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:15:32