생산 단계에만 존재하는 모듈 시스템이 있다고 가정 해 보겠습니다. 테스트하는 순간에는 이러한 모듈이 존재하지 않습니다. 하지만 여전히 그 모듈을 사용하는 코드에 대한 테스트를 작성하고 싶습니다. 또한 필요한 모든 객체를 모듈에서 조롱하는 방법을 알고 있다고 가정 해 보겠습니다. 질문 : 어떻게하면 편리하게 모듈 스텁을 현재 계층에 추가합니까?존재하지 않는 모듈의 계층 구조를 조롱하려면 어떻게해야합니까?
다음은 작은 예입니다. 내가 테스트 할 기능은 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']
를 대체 할 수 있다는 것을 알고. 하지만 그것은 나를위한 많은 코드처럼 보입니다. 훨씬 간단하고 예쁜 솔루션이 있어야한다고 가정합니다. 나는 그것을 찾을 수 없다.