Ich versuche, eine Klasse zu patchen, die von der Klasse, die ich testen möchte, instanziiert wird, aber es funktioniert nicht. Ich habe die verschiedenen Dokumente gelesen, aber immer noch nicht gefunden, was ich falsch mache. Hier ist der Code-Schnipsel:Patch-Klasse, die von der getesteten Klasse instanziiert wurde, kann nicht mit Unittest verwendet werden
In tests/Test.py
:
from module.ClassToTest import ClassToTest
class Test(object):
@mock.patch('module.ClassToPatch.ClassToPatch', autospec = False)
def setUp(self, my_class_mock):
self.instance = my_class_mock.return_value
self.instance.my_method.return_value = "def"
self.class_to_test = ClassToTest()
def test(self):
val = self.class_to_test.instance.my_method() #Returns 'abc' instead of 'def'
self.assertEqual(val, 'def')
In module/ClassToPatch.py
:
class ClassToPatch(object):
def __init__(self):
pass
def my_method(self):
return "abc"
In module/ClassToTest.py
:
from module.ClassToPatch import ClassToPatch
class ClassToTest(object):
def __init__:
# Still instantiates the concrete class instead of the mock
self.instance = ClassToPatch()
ich in diesem Fall weiß ich leicht die injizieren könnte Abhängigkeit, aber das ist nur ein Beispiel. Außerdem verwenden wir eine Richtlinie für einzelne Klassen pro Datei, wobei die Datei wie die Klasse benannt ist, daher die seltsame Importbenennung.
Versuchen Sie @ mock.patch ('module.ClassToTest.ClassToPatch', autospec = False) –
In der Zukunft, machen Sie bitte Ihren Beispielcode ein [MCVE] (http://stackoverflow.com/help/mcve); Es gab mehrere Fehler in Ihrem geposteten Code und Sie können sich nicht darauf verlassen, dass jemand mit dem Problem vertraut ist, um das Problem sofort zu erkennen und eine Lösung anzubieten. –
Ok, ich nehme es zur Kenntnis – sixtstorm1