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

Я понимаю, что у 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

1 Ответ

0 голосов
/ 23 февраля 2019

Вы можете добавить метод 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.
...