本番段階にのみ存在するモジュールのシステムがあると仮定しましょう。テストの時点では、これらのモジュールは存在しません。それでも、それらのモジュールを使用するコードのテストを書きたいと思っています。また、これらのモジュールから必要なすべてのオブジェクトをモックする方法を知っていると仮定しましょう。問題は、モジュール スタブを現在の階層に簡単に追加するにはどうすればよいかということです。
ここに小さな例があります。テストしたい機能は、次のファイルに配置されています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']
別のオブジェクトを含むオブジェクトなどで置き換えることができることを知っています。しかし、それは私にとっては多くのコードのようです。もっとシンプルできれいな解決策があるに違いないと思います。私はそれを見つけることができません。