상상적으로 명명 된 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))
내가 도대체 뭘 잘못하고있는 겁니까?
답변
Kit의 답변에 추가하려면 patch.object()
모의 객체 / 메소드를 지정할 수 있도록 세 번째 인수를 지정합니다. 그렇지 않으면 기본 MagicMock
개체가 사용됩니다.
def fake_bar(self):
print "Do something I want!"
return True
@patch.object(my_app.models.FooClass, 'bar', fake_bar)
def test_enter_promotion(self):
self.client.get(reverse(view))
# Do something I want!
모의 객체를 지정하면 기본값 MagicMock()
이 더 이상 패치 된 객체에 전달되지 않습니다. 예를 들어 더 이상 :
def test_enter_promotion(self, mock_method):
대신 :
def test_enter_promotion(self):
http://www.voidspace.org.uk/python/mock/patch.html#patch-object
답변
아, 패치 데코레이터를 어디에 적용해야하는지 혼란 스러웠습니다. 결정된:
class ViewsDoSomething(TestCase):
view = 'my_app.views.do_something'
@patch.object(my_app.models.FooClass, 'bar')
def test_enter_promotion(self, mock_method):
self.client.get(reverse(view))