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

使用pytest mock调用assert_has_calls()触发TypeError如何解决?

错误原因

你构造期望调用列表的逻辑存在错误:直接执行mock_draw_discard_pile_attempt_check_meld_match(P2, True)这类调用时,mock对象默认返回None,导致你传入assert_has_calls的calls列表实际存储的是两个None值。而assert_has_calls要求传入由call实例组成的列表,框架在解析调用参数时尝试对None执行len()操作,就触发了本次类型错误。

修复方案

  1. 首先导入unittest.mock提供的call工具:
from unittest.mock import call
  1. 修改期望调用列表的构造逻辑,不要直接调用mock对象,改用call构造期望的入参即可:
calls = [
    call(P2, True),
    call(P2)
]
mock_draw_discard_pile_attempt_check_meld_match.assert_has_calls(calls)

如果不需要严格校验两次调用的顺序,可以给assert_has_calls添加any_order=True参数:

mock_draw_discard_pile_attempt_check_meld_match.assert_has_calls(calls, any_order=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:36:04