Sto provando a patchare una classe istanziata dalla classe che sto provando a testare, ma non funziona. Ho letto i vari documenti ma non ho ancora trovato quello che sto facendo male. Ecco il frammento di codice:Impossibile patch classe istanziata dalla classe testata utilizzando unittest
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()
So che in questo caso ho potuto facilmente iniettare il dipendenza, ma questo è solo un esempio. Inoltre, utilizziamo una singola classe per criterio di file, con il file chiamato come la classe, da cui la strana denominazione di importazione.
Prova @ mock.patch ('module.ClassToTest.ClassToPatch', autospec = False) –
In futuro, inserisci il codice di esempio in [MCVE] (http://stackoverflow.com/help/mcve); c'erano molti bug nel codice postato e non si può fare affidamento su qualcuno che abbia familiarità con il problema per individuare immediatamente il problema e offrire una soluzione. –
Ok, ne prenderò nota – sixtstorm1