假設我們有一個只存在於生產階段的模塊系統。在測試這些模塊時不存在。但是我仍然想爲使用這些模塊的代碼編寫測試。我們還假設我知道如何模擬這些模塊中的所有必要對象。問題是:我如何方便添加模塊存根到當前層次?如何模擬不存在的模塊的層次結構?
這是一個小例子。我想測試的功能被放置在一個名爲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']
。但它對我來說似乎有很多代碼。我認爲必須有更簡單更漂亮的解決方案。我無法找到它。