AttributeError: у объекта 'function' нет атрибута в Pytest Mock - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь проверить, вызывается ли моя функция внутри теста, но я получаю:

AttributeError: у объекта 'function' нет атрибута 'assert_called_once'

Я не издеваюсь над этим правильно, поэтому не могли бы вы помочь мне выяснить, почему мой макет не работает в этом случае. У меня есть правильный путь, чтобы издеваться над функцией.

Я пробовал это -> create_autospec , чтобы решить ошибку AttributeError, но не повезло.

Пример кода:

class MyClass:
    def __init__(self):
        self._data = {}

    def a(self, value):
        self._data = value

@pytest.fixture
def my_fixture():
    return MyClass()

@pytest.mark.asyncio
async def test_random_function(my_fixture, mocker):
    s = mocker.patch('path.module.a',
                              my_fixture.a)

    await random_function()
    s.assert_called_once()

1 Ответ

0 голосов
/ 07 октября 2019

my_fixture.a в вашей тестовой функции - это MyClass.a функция, которая явно не имеет assert_called_once. Это метод из unittest.mock.Mock и unittest.mock.MagicMock. Я не знаю, почему вы исправляете path.module.a своим собственным объектом, но я думаю, вам будет трудно получить ту же функциональность, которую обеспечивает MagicMock. В вашем примере я бы просто использовал следующее.

@pytest.mark.asyncio
async def test_random_function(my_fixture, mocker):
    s = mocker.patch('path.module.a')

    await random_function()
    s.assert_called_once()
...