Próbuję wyśmiać coś podczas testowania aplikacji Django przy użyciu nazwy użytkownika o nazwie Mock testing library. Nie wydaje mi się, żeby to działało, próbuję to zrobić:Używanie makiety do kpiny z metody instancji
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))
Co robię źle?
'' 'bar''' w rzeczywistości jest "metoda instancji", a jego jedynym parametrem jest' '' self' ''. Aby być metodą klasową, musiałaby być sparametryzowana za pomocą '' 'cls''' i mogłaby być wywołana jako' 'Promotion.foo()' ''. – cavaunpeu
Obiekt do patchowania musi być cytowany w ten sposób: '@ patch.object ('my_app.models.FooClass', 'bar')' – Lasma
@cavaunpeu - nie (just) sparametryzowany przez 'cls', ale co ważniejsze (ponieważ 'self' i' cls' nie mają nic szczególnego w pythonie), ozdobione '@ classmethod' – dwanderson