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

Python使用Mockito mock open()时如何忽略非预期调用?

解决Mockito模拟open()时忽略非预期调用的问题

出现这个错误是因为测试过程中,除了你业务代码里的open('oneWay_matchDict.pkl', 'rb'),还有其他代码(比如示例中的doctest模块)调用了open读取其他文件,而Mockito默认的严格模式会检查所有调用是否有对应的Stub定义,因此抛出非预期调用的错误。

你可以通过以下方式解决:

方法一:添加通用Stub匹配所有非预期调用

先定义你需要精确匹配的特定open调用,再添加一个匹配任意参数的通用Stub,让所有非预期的open调用都返回一个空Mock对象,这样就不会触发错误:

from mockito import mock, when2, any

# 创建你需要的特定Mock文件对象
pkl_file = mock()
# 先Stub你关心的精确调用
when2(open, 'oneWay_matchDict.pkl', 'rb').thenReturn(pkl_file)
# 添加通用Stub,匹配所有其他open调用
when2(open, any(), any()).thenReturn(mock())

注意Stub的顺序很重要:先定义精确匹配的规则,再定义通用规则,Mockito会按顺序匹配调用,优先使用精确匹配的Stub。

补充:按需校验调用

如果你在测试中需要校验open的调用情况,只需要针对你关心的调用做验证,不要对open执行全量的无剩余调用校验:

from mockito import verify

# 只验证你关心的open调用是否执行过
verify(open, times=1)('oneWay_matchDict.pkl', 'rb')
# 避免调用verifyNoMoreInteractions(open)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:40:07