Pytest-mock — почему не подменяется функция?

Pytest-mock предоставляет возможность создания и использования мок-объектов для тестирования кода на языке Python. Мок-объекты позволяют временно заменить реальные объекты в программе на имитации этих объектов, что упрощает тестирование и изоляцию частей кода.

Если в вашем случае функция не подменяется с использованием pytest-mock, возможно, есть несколько причин, с которыми стоит ознакомиться.

1. Неправильное использование @patch декоратора: pytest-mock позволяет использовать @patch декоратор для замены функций и методов объектов. Однако, для успешной подмены функции необходимо убедиться, что декоратор используется правильно и включает правильное имя модуля или объекта, в котором находится функция, которую вы хотите подменить. Обратите внимание на то, что @patch должен быть применен в том же модуле или пакете, где вы проводите тестирование.

Например, если ваш код выглядит примерно так:

from module import function_to_mock

def test_my_function(mock_function_to_mock):
    # Здесь происходит вызов функции, которую вы хотите подменить
    result = function_to_mock()

    assert result == 42

То для успешной подмены функции function_to_mock вам нужно иметь следующую структуру файла с тестом:

from module import function_to_mock

from pytest_mock import mocker
from pytest_mock import patch

@patch('module.function_to_mock')  # Проверьте правильность имени модуля или объекта
def test_my_function(mock_function_to_mock):
    mock_function_to_mock.return_value = 42

    result = function_to_mock()

    assert result == 42

2. Неправильное наименование мок-объекта: Иногда проблема может быть связана с неправильным наименованием объекта мока, который вы создаете для подмены функции. Убедитесь, что вы используете правильное наименование объекта мока при использовании его внутри тестовой функции.

3. Неправильное утверждение о вызове функции: Если вы ожидаете вызов подменяемой функции с определенными аргументами, убедитесь, что вы правильно утверждаете фактический вызов функции. Проверьте, что значения аргументов совпадают с ожидаемыми значениями.

4. Проблемы импорта или области видимости: Убедитесь, что функцию, которую вы пытаетесь подменить, получается получить в нужной области видимости. Импортируйте функцию внутри файла с тестом, если это необходимо, или проверьте, нет ли ошибок ваших импортов.

Если после проверки этих аспектов проблема с подменой функции остается нерешенной, возможно стоит обратиться за дополнительной помощью на форуме сообщества или в документации pytest-mock.