Python. Как я могу утверждать, что фиктивный объект не вызывался с конкретными аргументами?

Я понимаю, что для объектов unittest.mock теперь доступен метод assert_not_called, но мне нужен метод assert_not_called_with. Есть ли что-нибудь подобное? Я посмотрел в Google и ничего не увидел, а когда я попытался просто использовать mock_function.assert_not_called_with(...), он поднял AttributeError, что означает, что функция с таким именем не существует.

Мое текущее решение

with self.assertRaises(AssertionError):
    mock_function.assert_called_with(arguments_I_want_to_test)

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

Связанный

Утверждение, что функция/метод не вызывалась с помощью Mock


person Nathan Wailes    schedule 23.02.2019    source источник


Ответы (1)


Вы можете самостоятельно добавить метод assert_not_called_with к unittest.mock.Mock:

from unittest.mock import Mock

def assert_not_called_with(self, *args, **kwargs):
    try:
        self.assert_called_with(*args, **kwargs)
    except AssertionError:
        return
    raise AssertionError('Expected %s to not have been called.' % self._format_mock_call_signature(args, kwargs))

Mock.assert_not_called_with = assert_not_called_with

так что:

m = Mock()
m.assert_not_called_with(1, 2, a=3)
m(3, 4, b=5)
m.assert_not_called_with(3, 4, b=5)

выходы:

AssertionError: Expected mock(3, 4, b=5) to not have been called.
person blhsing    schedule 23.02.2019
comment
Экземпляр «ClassA» не имеет члена «assert_called_with» — как решить эту проблему? - person arvindwill; 10.06.2020