Вызван макет утверждения, созданный с использованием спецификации, вызывает ошибку

#python-3.x #unit-testing #mocking

#python-3.x #модульное тестирование #издевательство

Вопрос:

Я хочу создать макет, используя create_autospec из unittest.mock модуля, а затем утверждать, что макет был вызван. Из чтения документации я понял, что вы можете имитировать экземпляр класса, передав объект класса как spec в create_autospec и установив instance параметр в True .

Когда я вызываю созданный макет, а затем пытаюсь утверждать, что мой макет был вызван, я получаю две ошибки (вторая ошибка вызвана первой):

  1. TypeError: missing a required argument: 'self'
  2. AssertionError: expected call not found.

Я ожидал, что мой код не вызовет никаких ошибок, потому что созданный макет должен вести себя как экземпляр вызываемого класса, и макет был вызван.

Может кто-нибудь объяснить мне, почему возникает эта ошибка и каков правильный способ сделать это?

Вот фрагмент кода, который воссоздает мою проблему:

 from unittest.mock import create_autospec


class Thing:
    def __call__(self, *args, **kwargs):
        pass


thing_mock = create_autospec(Thing, instance=True)
thing_mock()
thing_mock.assert_called_once_with()