Python Mock Patch из другого файла / модуля - PullRequest
1 голос
/ 08 июля 2019

У меня есть макет, который работает нормально, как и ожидалось.

from mock import patch

def second(arg):
    return 3


def first():
    return second('arg')


@patch('test.second')
def test_test(second_mock):
    second_mock.return_value = 47  # We decide this

    call_it = first()

    second_mock.assert_called_once()
    second_mock.assert_called_with('arg')

    assert call_it == 47

Но если я перенесу метод second () в другой файл ...

from mock import patch
from test_help import second


def first():
    return second('arg')


@patch('test_help.second')
def test_test(second_mock):
    second_mock.return_value = 47  # We decide this

    call_it = first()

    second_mock.assert_called_once()
    second_mock.assert_called_with('arg')

    assert call_it == 47

Я получаю ту же ошибку: AssertionError: Ожидается, что 'second' будет вызван один раз. Вызывается 0 раз.

Что мне здесь не хватает?

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

1 Ответ

1 голос
/ 08 июля 2019

Не волнуйтесь, вы на правильном пути, это способ высмеивать функции.

А что касается вашего зонда, помните, что вы исправляете пространство имен в соответствии с функцией, из которой вызывается максируемая функция.

Итак, когда вы в своем модуле module_where_first_is_located делаете импорт from test_help import second, секунда распознается как module_where_first_is_located.second.

Так что вместо @patch('test_help.second') делай @patch('module_of_first.second').

...