我试图在使用富有想象力的名称Mock testing library测试Django应用程序时嘲笑某事。我似乎无法完成它的工作,我试图做到这一点:使用模拟修补程序来模拟实例方法
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))
我在做什么错?
'''bar'''实际上是一个 “实例方法”,其唯一的参数是'''self' ''。要成为一个类方法,它需要用''cls'''来参数化,并且可以调用为'''Promotion.foo()'''。 – cavaunpeu
可修补对象需要像这样引用: '@ patch.object('my_app.models.FooClass','bar')' – Lasma
@cavaunpeu - not(just)用'cls'参数化,但更重要的是(自'self'和'cls'并不意味着Python中任何特殊的东西),用'@ classmethod'装饰 – dwanderson