循環インポートを回避するために、次のような関数を定義する必要がありました。
# do_something.py
def do_it():
from .helpers import do_it_helper
# do stuff
ここで、do_it_helper
にパッチを適用して、この関数をテストできるようにしたいと思います。インポートがトップレベルのインポートであった場合、
class Test_do_it(unittest.TestCase):
def test_do_it(self):
with patch('do_something.do_it_helper') as helper_mock:
helper_mock.return_value = 12
# test things
うまくいくでしょう。ただし、上記のコードは私に与えます:
AttributeError: <module 'do_something'> does not have the attribute 'do_it_helper'
気まぐれで、パッチステートメントを次のように変更してみました。
with patch('do_something.do_it.do_it_helper') as helper_mock:
しかし、それは同様のエラーを引き起こしました。それが使用されている関数内にインポートすることを余儀なくされているという事実を考えると、この関数をモックする方法はありますか?
_helpers.do_it_helper
_をモックアウトする必要があります:
_class Test_do_it(unittest.TestCase):
def test_do_it(self):
with patch('helpers.do_it_helper') as helper_mock:
helper_mock.return_value = 12
# test things
_
os.getcwd()
でモックを使用する例を次に示します。
_import unittest
from mock import patch
def get_cwd():
from os import getcwd
return getcwd()
class MyTestCase(unittest.TestCase):
@patch('os.getcwd')
def test_mocked(self, mock_function):
mock_function.return_value = 'test'
self.assertEqual(get_cwd(), 'test')
_
お役に立てば幸いです。