Python MagicMock assert_called_once_ без учета аргументов? - PullRequest
0 голосов
/ 10 декабря 2018

Я настраиваю экземпляр MagicMock, дважды вызываю один и тот же метод с разными аргументами и устанавливаю утверждение для проверки только для одного набора аргументов.

Python: 3.5.2

from unittest.mock import MagicMock

my_mock = MagicMock()
my_mock.some_method()
my_mock.some_method(123)

my_mock.some_method.assert_called_once_with(123)

AssertionError: Expected 'some_method' to be called once. Called 2 times.

Я ожидаю, что это пройдет.Почему он игнорирует аргументы?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Из unittest.mock документов :

assert_called_once_with (* args, ** kwargs)

Утверждать, что макетбыл вызван ровно один раз, и этот вызов был с указанными аргументами.

Поскольку вы вызываете метод дважды, это должно завершиться неудачей.

В этом конкретном случае вы можете использовать:

expected_calls = [call(), call(123)]
my_mock.some_method.assert_has_calls(expected_calls, any_order=False)

, который будет утверждать, что ожидаемые вызовы были использованы в порядке, указанном в expected_calls

0 голосов
/ 10 декабря 2018

Мы обнаружили, что assert_called_with на самом деле то, что мы хотим.

Это кажется запутанным, и я думаю, что его следует называть assert_called_only_once_with.

...