Как assert_called_with первого вызова, если метод был вызван дважды в другом методе?

Например в t.py

def a(obj):
  print obj

def b():
  a(1)
  a(2)

затем:

from t import b

with patch('t.a') as m:
  b()
  m.assert_called_with(1)

Я получил:

AssertionError: Expected call: a(1)
Actual call: a(2)

1 ответ

Решение

Самый простой подход - получить первый предмет от mock.call_args_list и проверьте, если он вызывается с 1:

call_args_list

Это список всех вызовов, сделанных к фиктивному объекту в последовательности (поэтому длина списка - это количество раз, которое он был вызван).

assert m.call_args_list[0] == call(1)

где call импортируется из mock: from mock import call,

Также, mock_calls будет работать вместо call_args_list тоже.

Другой вариант будет использовать assert_any_call():

m.assert_any_call(1)
Другие вопросы по тегам