приятнее способ может быть для создания ожидаемых вызовов вашей собственной личности, то использовать прямое утверждение:
>>> from mock import call, Mock
>>> f = Mock()
>>> f('first call')
<Mock name='mock()' id='31270416'>
>>> f('second call')
<Mock name='mock()' id='31270416'>
>>> expected_calls = [call(s + ' call') for s in ('first', 'second')]
>>> f.assert_has_calls(expected_calls)
Обратите внимание, что вызовы должны быть последовательными, если вы не хотите, чтобы затем переопределить any_order
kwarg к утверждению.
Также обратите внимание на то, что для звонков до или после указанных допускаются дополнительные вызовы. Если вы не хотите, что вам нужно добавить еще одно утверждение:
>>> assert f.call_count == len(expected_calls)
Обращаясь замечание mgilson, вот пример создания фиктивного объекта, который можно использовать для подстановочных сравнения равенства:
>>> class AnySuffix(object):
... def __eq__(self, other):
... try:
... return other.startswith('PASS')
... except Exception:
... return False
...
>>> f = Mock()
>>> f('PASS and some other stuff')
<Mock name='mock()' id='28717456'>
>>> f('PASS more stuff')
<Mock name='mock()' id='28717456'>
>>> f("PASS blah blah don't care")
<Mock name='mock()' id='28717456'>
>>> expected_calls = [call(AnySuffix())]*3
>>> f.assert_has_calls(expected_calls)
И пример режима отказа:
>>> Mock().assert_has_calls(expected_calls)
AssertionError: Calls not found.
Expected: [call(<__main__.AnySuffix object at 0x1f6d750>),
call(<__main__.AnySuffix object at 0x1f6d750>),
call(<__main__.AnySuffix object at 0x1f6d750>)]
Actual: []
Я думаю, что это действительно зависит от того, что утверждение вы тр чтобы сделать. Вы пытаетесь проверить только позиционные аргументы? Вы пытаетесь проверить позиционные и ключевые слова? Вы пытаетесь проверить сами ключевые слова или значения, переданные с помощью аргументов ключевого слова? например если вы хотите только проверить, что первый позиционный аргумент начинается с '' PASS'', тогда 'self.assertTrue (вызов [0] [0] .startswith ('Pass'))' должен делать трюк без внутренних 2 циклов , – mgilson