Как имитировать функцию, определенную в отдельном модуле Python, используя @patch макетаPython

Программы на Python
Anonymous
Как имитировать функцию, определенную в отдельном модуле Python, используя @patch макета

Сообщение Anonymous »

Я пытаюсь создать тест для приложения Python, используя макет и декоратор @patch.
При следующей структуре каталогов:

Код: Выделить всё

  |-- mypackage
|   |-- mymodule
|   |   |-- __init__.py
|   |   \-- somefile.py
|   \-- myothermodule
|       |-- tests
|       |   |-- __init__.py
|       |   \-- test_func_to_test.py
|       \-- __init__.py
\-- __init__.py
Где находится содержимое файлов:

Код: Выделить всё

#mypackage/mymodule/somefile.py

def some_function():
return 'A'

Код: Выделить всё

#mypackage/myothermodule/__init__.py

from mypackage.mymodule.somefile import some_function

def func_to_test():
return some_function()

Код: Выделить всё

#mypackage/myothermodule/tests/test_func_to_test.py

from unittest import TestCase
from mock import patch

class TestFunc_to_test(TestCase):
def test_func_to_test(self):
from mypackage.myothermodule import func_to_test
self.assertEqual('A', func_to_test())

@patch('mypackage.mymodule.somefile.some_function')
def test_func_to_test_mocked(self, some_mock_function):
from mypackage.myothermodule import func_to_test
some_mock_function.return_value = 'B'
self.assertEqual('B', func_to_test())
У меня проблема в том, что, хотя первый тест проходит (test_func_to_test), второй тест (test_func_to_test_mocked) не проходит (из-за AssertionError).
Мне удалось имитировать функцию из «встроенных» модулей (например, Requests.get), используя тот же подход, однако я не могу заставить @patch работать при попытке исправить функцию из одного из моих модулей.

Вернуться в «Python»