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

使用Mockito verify的times方法遇异常:正确次数报null,错误次数提示次数过多

Mockito verify校验方法调用次数时的异常问题

我在使用Mockito的verify方法测试testMethod的调用次数(该方法实际仅执行2次)时遇到异常:

  • 指定times(2)校验时,报错信息中出现null
  • 改为times(1)时,报错明确提示实际调用次数为2次,不符合预期的1次

具体报错信息

指定times(2)时的报错:

verify(XXXXXXX, times(2)).testMethod(any(XXXXXX.class))
|      |          |         |        |        |
|      |          |         null    null      class XXXXXX
|      |          Wanted invocations count: 2
|      Mock for XXXXXXX, hashCode: 292294397
Mock for XXXXXXX, hashCode: 292294397

指定times(1)时的报错:

verify(XXXXXXX, times(1)).testMethod(any(XXXXXX.class))
|      |          |         |     |         |
|      |          |         |     null      class XXX
|      |          |         org.mockito.exceptions.verification.TooManyActualInvocations: 
|      |          |         XXX.XXXX(
|      |          |             <any XXX>
|      |          |         );
|      |          |         Wanted 1 time:
|      |          |         -> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|      |          |         But was 2 times:
|      |          |         -> at XXXX.XXX(XXX.java:129)
|      |          |         -> at XXXXX.XXX(XXX.java:129)
|      |          |          
|      |          |         
|      |          Wanted invocations count: 1

排查方向

  • 检查Mock实例一致性:报错中出现两个相同hashCode的Mock实例,大概率是测试过程中Mock对象被重复初始化,导致verify校验的实例和实际接收调用的实例不是同一个。
  • 校验参数匹配器:报错里的null可能和any(XXXXXX.class)的使用有关,尝试替换为具体参数匹配器(如eq()),确认参数类型是否完全匹配。
  • 确认实际调用记录:通过Mockito.mockingDetails(mockInstance).getInvocations()打印所有调用日志,核对实际调用次数、参数是否和预期一致。
  • 升级Mockito版本:部分旧版本Mockito在多调用校验场景下存在bug,尝试升级到4.x或5.x的稳定版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:21:01