Kit Sunde Kit Sunde - 4 years ago 814
Python Question

Using mock patch to mock a class method

I'm trying to mock something while testing a Django app using the imaginatively named Mock testing library. I can't seem to quite get it to work, I'm trying to do this:

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


What am I doing wrong?

Answer Source

Ah I was confused on where to apply that patch decorator. Fixed:

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))
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download