There a FooObject class with only one version field and one update() method.
class FooObject(models.Model):
version = models.CharField(max_length=100)
I would like to override update method for the unittest using Python's Mock tool. How would I do it? Should I use patch for it?
foo_object.update = Mock(self.version = '123')
To do that you can mock the class function with the @patch like that
from mock import patch
# Our class to test
class FooObject():
def update(self, obj):
print obj
# Mock the update method
@patch.object(FooObject, 'update')
def test(mock1):
# test that the update method is actually mocked
assert FooObject.update is mock1
foo = FooObject()
foo.update('foo')
return mock1
# Test if the mocked update method was called with 'foo' parameter
mock1 = test()
mock1.assert_called_once_with('foo')
You can even mock more functions like that:
from mock import patch
class FooObject():
def update(self, obj):
print obj
def restore(self, obj):
print obj
@patch.object(FooObject, 'restore')
@patch.object(FooObject, 'update')
def test(mock1, mock2):
assert FooObject.update is mock1
assert FooObject.restore is mock2
foo = FooObject()
foo.update('foo')
foo.restore('bar')
return mock1, mock2
mock1, mock2 = test()
mock1.assert_called_once_with('foo')
mock2.assert_called_once_with('bar')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With