我試圖在使用富有想象力的名稱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