from unittest import mock

class MyClass(object):
    def my_method(self, arg):
        return arg + 1

def unit_under_test():
    inst = MyClass()
    return inst.my_method(1)

class MyMock(mock.MagicMock):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        print('called with', args, kwargs)

with mock.patch.object(mock, 'MagicMock', MyMock):
    with mock.patch.object(MyClass, 'my_method', autospec=True, side_effect=MyClass.my_method) as spy:
        result = unit_under_test()
        assert result == 2
        assert spy.call_count == 1