使用模拟修补程序模拟实例方法

2024-09-26 18:08:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在测试Django应用程序的时候用一个富有想象力的名字Mock testing library来模拟一些东西。我似乎无法让它正常工作,我正在尝试:

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))

我做错什么了?


Tags: pytestselfviewappmodelsmydef
2条回答

啊,我不知道该在哪里应用补丁装饰。固定:

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))

要添加到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

相关问题 更多 >

    热门问题