from unittest import TestCase from unittest.mock import MagicMock class Foo: def __init__(self, x, y, z): self.x = x self.y = y self.z = z def __str__(self): return '{0}(x={1}, y={2}, z={3})'.format(self.__class__.__name__, self.x, self.y, self.z) def __repr__(self): return self.__str__() class Test(TestCase): def test1(self): bar = MagicMock() a = Foo('aa', 'bb', 'cc') bar.x(a) print(bar.mock_calls) # Prints [call.x(Foo(x=aa, y=bb, z=cc))], it's ok a.y = 'FooBar' bar.x(a) print(bar.mock_calls) # Prints [call.x(Foo(x=aa, y=FooBar, z=cc)), call.x(Foo(x=aa, y=FooBar, z=cc))]. I would expect [call.x(Foo(x=aa, y=bb, z=cc)), call.x(Foo(x=aa, y=FooBar, z=cc))] here