Я пытаюсь воссоздать mock_calls example, чтобы я мог проверить, что ожидаемый список вызовов равен фактическим выполненным вызовам. Тем не менее, Я получаю NameError
исключения, потому что name 'call' is not defined
:Утверждение `mock_calls` равно ожидаемому списку вызовов
>>> from mock import MagicMock
>>> mock = MagicMock()
>>> result = mock(1, 2, 3)
>>> mock.first(a=3)
<MagicMock name='mock.first()' id='47645192'>
>>> mock.second()
<MagicMock name='mock.second()' id='47653440'>
>>> int(mock)
1
>>> result(1)
<MagicMock name='mock()()' id='47666064'>
>>> expected = [call(1, 2, 3), call.first(a=3), call.second(), call.__int__(), call()(1)]
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
expected = [call(1, 2, 3), call.first(a=3), call.second(), call.__int__(), call()(1)]
NameError: name 'call' is not defined
Я попытался определение моей expected
переменного как строка вместо того, чтобы, однако это еще не позволяет провести прямое сравнение.
>>> expected = """[call(1, 2, 3), call.first(a=3), call.second(), call.__int__(), call()(1)]"""
>>> mock.mock_calls == expected
False
>>> mock.mock_calls
[call(1, 2, 3), call.first(a=3), call.second(), call.__int__(), call()(1)]
Любые идеи о том, как заставить этот пример работать? Если это так, это то же самое, что и надлежащий способ проверить, что mock_calls
имеет ожидаемый список вызовов и в том же порядке?
Edit:
Вот исходный код _CallList
класса, который является тип объекта, возвращаемого атрибутом mock_calls
.
class _CallList(list):
def __contains__(self, value):
if not isinstance(value, list):
return list.__contains__(self, value)
len_value = len(value)
len_self = len(self)
if len_value > len_self:
return False
for i in range(0, len_self - len_value + 1):
sub_list = self[i:i+len_value]
if sub_list == value:
return True
return False
def __repr__(self):
return pprint.pformat(list(self))
Спасибо! Я тоже пробовал искать метод «call», но не смог найти его в своей усталости. –