Using Python mock to spy on calls to an existing object

You can use patch.object(wraps=obj_instance) as suggested in Spying on instance methods with Python's mock module.

For example:

from mock import patch

class Foo(object):
    def bar(self, x, y):
        return x + y + 1

def test_bar():
    foo = Foo()
    with patch.object(foo, 'bar', wraps=foo.bar) as wrapped_foo:
        foo.bar(1, 2)
        wrapped_foo.assert_called_with(1, 2)

I seem to have stumbled across the solution:

import mock

class A(object):
    def meth(self, a):
        return a
a = A()
ma = mock.Mock(wraps=a)

Seems to work okay for functions, methods and properties, but not for class or instance attributes.

See the documentation.