Nehmen wir an, wir haben ein System von Modulen, das nur in der Produktionsphase existiert. Zum Zeitpunkt der Prüfung existieren diese Module nicht. Trotzdem möchte ich Tests für den Code schreiben, der diese Module verwendet. Nehmen wir an, ich weiß, wie man alle notwendigen Objekte aus diesen Modulen herausspotten kann. Die Frage ist: Wie kann ich bequem Modul Stubs in die aktuelle Hierarchie hinzufügen?Wie spotte ich die Hierarchie von nicht vorhandenen Modulen?
Hier ist ein kleines Beispiel.
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)
ich schon alles, was ich brauche in meinem Test-Suite:: Ich habe thing1_mock
und thing2_mock
Die Funktionalität, die ich testen mag, wird in einer Datei namens actual.py
platziert. Ich habe auch eine Testfunktion. Was ich brauche, ist level1.level2...
in das aktuelle Modulsystem hinzuzufügen. Wie folgt aus:
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()
weiß ich, dass ich sys.modules['level1']
mit einem Objekt ersetzen kann ein anderes Objekt enthält, und so weiter. Aber es scheint mir eine Menge Code zu sein. Ich gehe davon aus, dass es eine viel einfachere und schönere Lösung geben muss. Ich kann es einfach nicht finden.