モックと@patchデコレータを使用してPythonアプリケーションのテストを作成しようとしています。
次のディレクトリ構造が与えられます。
|-- 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)しますが、2番目のテスト(test_func_to_test_mocked)は合格しない(AssertionErrorのため)ということです。
同じアプローチを使用して、「組み込み」モジュール(requests.getなど)から関数をモックすることができましたが、いずれかの関数にパッチを適用しようとすると、@patchが機能しないようです。モジュール..。
どんな助けもいただければ幸いです:)