生産段階にのみ存在するモジュールのシステムがあるとしましょう。テストの瞬間、これらのモジュールは存在しません。しかし、それらのモジュールを使用するコードのテストを記述したいと思います。また、それらのモジュールから必要なオブジェクトをすべて模倣する方法を知っていると仮定しましょう。質問は、どうすれば便利にモジュールのスタブを現在の階層に追加するのですか?存在しないモジュールの階層を模擬するにはどうすればよいですか?
ここに小さな例があります。私がテストしたい機能は、ファイルに配置されactual.py
と呼ばれる:私のテストスイートで
actual.py:
def coolfunc():
from level1.level2.level3_1 import thing1
from level1.level2.level3_2 import thing2
do_something(thing1)
do_something_else(thing2)
私はすでに、私は必要なすべてを持っている:私はthing1_mock
とthing2_mock
を持っています。また、私はテスト機能を持っています。私が必要とするのは、現在のモジュールシステムにlevel1.level2...
を追加することです。このように:
tests.py
import sys
import actual
class SomeTestCase(TestCase):
thing1_mock = mock1()
thing2_mock = mock2()
def setUp(self):
sys.modules['level1'] = what should I do here?
@patch('level1.level2.level3_1.thing1', thing1_mock)
@patch('level1.level2.level3_1.thing1', thing2_mock)
def test_some_case(self):
actual.coolfunc()
私は私が上の別のオブジェクトを含むオブジェクトでsys.modules['level1']
を代用してできることを知っています。しかし、それは私のためのコードのように思える。はるかにシンプルできれいなソリューションが必要であると私は推測しています。私はそれを見つけることができません。