verify()配合times(N)可准确验证mock/spy对象方法调用次数,对普通new实例无效;语法为verify(mock, times(N)).method(args),参数需严格匹配或统一使用匹配器,void方法同样支持验证。

用 Mockito 的 verify() 配合 times(N) 就能准确验证方法被调用了几次,前提是目标方法必须发生在 mock 或 spy 对象上。
必须作用于 mock 或 spy 对象
Mockito 只记录对 mock(或 spy)对象的调用,对 new 出来的普通实例无效:
- ✅ 正确:用
mock(List.class)创建模拟对象,调用list.add("x")后再verify(list).add("x") - ❌ 错误:直接
new ArrayList(),然后对它调用verify(list).add("x")—— 会报 “wanted but not invoked” - ⚠️ spy 是特例:可用
spy(new ArrayList())验证真实对象,但注意它默认执行原逻辑,可能引发副作用
验证调用次数的基本写法
语法统一为:verify(mock, times(N)).methodName(args):
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
verify(mock, times(1)).doSomething()—— 必须恰好调用 1 次 -
verify(mock, times(0)).doSomething()或verify(mock, never()).doSomething()—— 确保完全没调用 -
verify(mock, atLeast(2)).doSomething()—— 至少调用 2 次
参数匹配要严格对应
Mockito 按方法签名 + 实际传参做精确匹配。参数不一致会导致 verify 失败,即使方法名和次数都对:
- 想宽松匹配,用
anyString()、eq("value")、isA(Integer.class)等匹配器 - 所有参数都用匹配器时,全部参数必须一致;混用字面量和匹配器会编译报错
void 方法也能验证
void 方法没有返回值,但调用行为本身可被验证:
- mock 后直接调用 void 方法,再用
verify(mock, times(1)).methodName(...)即可 - 不需要提前写
doNothing()—— Mockito 默认对 void 方法就做空处理 - 如需捕获参数做进一步断言,可用
ArgumentCaptor
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










