使用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()操作,就触发了本次类型错误。
修复方案
- 首先导入
unittest.mock提供的call工具:
from unittest.mock import call
- 修改期望调用列表的构造逻辑,不要直接调用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
相关产品推荐
相关产品推荐

