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

unittest.mock断言仅校验指定关键字参数忽略其余参数的正确写法

正确实现方案

方案1:直接读取call_args.kwargs校验(推荐,最直观无额外依赖)

你不需要调用assert_called_with,直接从mock对象的调用参数里取出关键字参数字典校验即可,代码如下:

# 可选:先校验方法确实被调用过
assert mock_foo.bar.called
# 校验目标参数存在且值符合预期
assert "important_arg" in mock_foo.bar.call_args.kwargs
assert mock_foo.bar.call_args.kwargs["important_arg"] == "hello"

这种写法逻辑清晰,不需要记忆任何特殊API,也不会出现你遇到的类型错误。


方案2:使用ANY搭配完整关键字参数(仅适合知道所有关键字参数key的场景)

如果你明确知道调用时会传入的所有关键字参数的key,只是不关心其他参数的值,可以把其他参数的值都指定为ANY,此时可以用assert_called_with:

from unittest.mock import ANY

mock_foo.bar.assert_called_with(important_arg="hello", unimportant_arg=ANY)

你之前的写法错误原因是:**运算符要求后面跟一个映射类型,而ANY是单个参数的匹配对象,不支持直接解包,所以触发了类型错误。


常见问题解答

是否必须手动读取call_args完成校验?
如果不知道调用时会传入的其他关键字参数的key,是的,读取call_args.kwargs是标准库支持的最简便的实现方式,不需要引入任何第三方依赖,性能和可读性都更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:36:02