【发布时间】:2021-12-11 04:55:56
【问题描述】:
我正在尝试在通过 @patch 装饰器使用 pytest 模拟时进行简单的 assert_has_calls() 调用。相反,我收到一条错误消息。下面是我在测试脚本中运行的代码的 sn-p。
calls = [mock_draw_discard_pile_attempt_check_meld_match(P2, True), mock_draw_discard_pile_attempt_check_meld_match(P2)]
mock_draw_discard_pile_attempt_check_meld_match.assert_has_calls(calls)
我收到的错误消息如下。
draw_discard_pile_attempt(P2, True)
mock_discard_pile_is_frozen.assert_called()
calls = [mock_draw_discard_pile_attempt_check_meld_match(P2, True), mock_draw_discard_pile_attempt_check_meld_match(P2)]
> mock_draw_discard_pile_attempt_check_meld_match.assert_has_calls(calls)
test_Canasta_replica.py:361:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
c:\users\jmt3e\anaconda3\lib\unittest\mock.py:211: in assert_has_calls
return mock.assert_has_calls(*args, **kwargs)
c:\users\jmt3e\anaconda3\lib\unittest\mock.py:938: in assert_has_calls
expected = [self._call_matcher(c) for c in calls]
c:\users\jmt3e\anaconda3\lib\unittest\mock.py:938: in <listcomp>
expected = [self._call_matcher(c) for c in calls]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <MagicMock name='draw_discard_pile_attempt_check_meld_match' spec='function' id='2654848555088'>, _call = None
def _call_matcher(self, _call):
"""
Given a call (or simply an (args, kwargs) tuple), return a
comparison key suitable for matching with other calls.
This is a best effort method which relies on the spec's signature,
if available, or falls back on the arguments themselves.
"""
if isinstance(_call, tuple) and len(_call) > 2:
sig = self._get_call_signature_from_name(_call[0])
else:
sig = self._spec_signature
if sig is not None:
> if len(_call) == 2:
E TypeError: object of type 'NoneType' has no len()
c:\users\jmt3e\anaconda3\lib\unittest\mock.py:854: TypeError
【问题讨论】:
标签: python mocking pytest patch assert