ich die folgenden Dateien:Wie eine Klasse verspotten, damit es nicht auf Import läuft
test_temp.py
:
import pytest
from mock import patch
with patch('temp.TheEvilClass'), patch('temp2.TheEvilClass'):
from temp import TempClass
def test_evil():
assert True
temp.py
:
from temp2 import TheEvilClass
class TempClass(object):
TheEvilClass()
temp2.py
:
class TheEvilClass(object):
print "I'm evil! ]:>"
raise Exception
Mein ich Intention war für den Patch in test_temp.py
, TheEvilClass
zu verspotten, so dass die Ausnahme nie aufgerufen wird. Ich habe versucht, es an beiden Orten zu patchen, aber die Ausnahme wird immer noch geworfen. Haben Sie irgendwelche Hinweise darauf, was ich falsch mache und wie man temp.py
testen kann, ohne jemals die tatsächliche TheEvilClass
auszulösen? Ich habe versucht, das ganze Modul zu verspotten (mit patch('temp2')
), aber das scheint auch nicht zu funktionieren.
Sie können nicht, Sie Patch * nach * importieren. Stattdessen sollten Sie 'temp2' neu gestalten, um beim Import nichts zu tun. – jonrsharpe
Ich stimme nicht mit @jonrsharpe überein, Sie möchten nicht unbedingt ändern, wie der Code nur für Testzwecke funktioniert. Es ist wahrscheinlicher, dass die Umgebung richtig eingerichtet werden muss, damit Importe nicht fehlschlagen. – wim
Leider kann ich mit temp2 nichts anfangen, da es ein externes Modul ist. – iknownothing