Python Mock Patch из другого файла / модуля
У меня есть макет, который работает нормально, как ожидалось.
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 ответ
Не волнуйтесь, вы на правильном пути, это способ высмеивать функции.
Что касается вашей задачи, помните, что вы исправляете пространство имен в соответствии с функцией, из которой вызывается проверенная функция.
Итак, когда вы в своем модуле 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')
,