Sto provando a prendere in giro qualcosa mentre collaudo un'app Django usando l'immaginativo Mock testing library. Io non riesco a ottenere abbastanza farlo funzionare, sto cercando di fare questo:Utilizzo della patch fittizia per simulare un metodo di istanza
models.py
from somelib import FooClass
class Promotion(models.Model):
foo = models.ForeignKey(FooClass)
def bar(self):
print "Do something I don't want!"
test.py
class ViewsDoSomething(TestCase):
view = 'my_app.views.do_something'
def test_enter_promotion(self):
@patch.object(my_app.models.FooClass, 'bar')
def fake_bar(self, mock_my_method):
print "Do something I want!"
return True
self.client.get(reverse(view))
Che cosa sto facendo di sbagliato?
'' 'bar''' è infatti un "metodo di istanza," e il suo unico parametro è' '' self' ''. Per essere un metodo di classe, dovrebbe essere parametrizzato con '' 'cls''', e sarebbe chiamabile come' '' Promotion.foo() '' '. – cavaunpeu
oggetto patchable ha bisogno di essere citato in questo modo: '@ patch.object ('my_app.models.FooClass', 'bar')' – Lasma
@cavaunpeu - non (solo) con parametri con 'cls', ma ancora più importante (dal 'self' e' cls' non significano nulla di speciale in python), decorato con '@ classmethod' – dwanderson