python check if a method is called without mocking it away python check if a method is called without mocking it away python python

python check if a method is called without mocking it away


You can set the Mock.side_effect to be the original method.

from unittest.mock import MagicMockclass A():    def tmp(self):        print("hi")def b(a):    a.tmp()a = A()a.tmp = MagicMock(side_effect=a.tmp)b(a)a.tmp.assert_called()

When side_effect is a function (or a bound method in this case, which is a kind of function), calling the Mock will also call the side_effect with the same arguments.

The Mock() call will return whatever the side_effect returns, unless it returns the unnittest.mock.DEFAULT singleton. Then it will return Mock.return_value instead.


Or you can decorate the method to test:

def check_called(fun):    def wrapper(self, *args, **kw):        attrname = "_{}_called".format(fun.__name__)        setattr(self, attrname, True)        return fun(self, *args, **kw)    return wrappera = A()a.tmp = check_called(a.tmp)b(a)assert(getattr(a, "_tmp_called", False))

but MagicMock's side_effect is definitly a better solution if you're already using Mock ;)