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
ZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawoKY2xhc3MgTXlDbGFzcyhvYmplY3QpOgogICAgZGVmIG15X21ldGhvZChzZWxmLCBhcmcpOgogICAgICAgIHJldHVybiBhcmcgKyAxCgpkZWYgdW5pdF91bmRlcl90ZXN0KCk6CiAgICBpbnN0ID0gTXlDbGFzcygpCiAgICByZXR1cm4gaW5zdC5teV9tZXRob2QoMSkKCmNsYXNzIE15TW9jayhtb2NrLk1hZ2ljTW9jayk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKICAgICAgICBwcmludCgnY2FsbGVkIHdpdGgnLCBhcmdzLCBrd2FyZ3MpCgp3aXRoIG1vY2sucGF0Y2gub2JqZWN0KG1vY2ssICdNYWdpY01vY2snLCBNeU1vY2spOgogICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChNeUNsYXNzLCAnbXlfbWV0aG9kJywgYXV0b3NwZWM9VHJ1ZSwgc2lkZV9lZmZlY3Q9TXlDbGFzcy5teV9tZXRob2QpIGFzIHNweToKICAgICAgICByZXN1bHQgPSB1bml0X3VuZGVyX3Rlc3QoKQogICAgICAgIGFzc2VydCByZXN1bHQgPT0gMgogICAgICAgIGFzc2VydCBzcHkuY2FsbF9jb3VudCA9PSAx
called with () {'parent': None, '_new_parent': None, '_new_name': '', 'name': 'my_method', 'spec': <function MyClass.my_method at 0x148e3f8289d0>, 'side_effect': <function MyClass.my_method at 0x148e3f8289d0>}
called with () {'_new_parent': <MyMock name='my_method' spec='function' id='22601182987888'>, '_new_name': '()'}