You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
mock.patch with autospec does not consume self / cls argument #76273
Currently, the autospec=True argument can be passed to mock.patch, but when trying to make assertions on the call and its arguments, it can fail, as it expects an instance / class instance reference as the first argument (self / cls arguments are not consumed when autospec-ing).
Steps to reproduce:
>>> import mock
>>> from mock.tests import testmock
>>>
>>> with mock.patch.object(testmock.Something, 'meth', autospec=True):
... smth = testmock.Something()
... smth.meth(mock.sentinel.a, mock.sentinel.b, mock.sentinel.c, mock.sentinel.d)
... smth.meth.assert_called_once_with(mock.sentinel.a, mock.sentinel.b, mock.sentinel.c, mock.sentinel.d)
...
<MagicMock name='meth()' id='139792133225424'>
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
File "/usr/local/lib/python2.7/dist-packages/mock/mock.py", line 318, in assert_called_once_with
return mock.assert_called_once_with(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/mock/mock.py", line 948, in assert_called_once_with
return self.assert_called_with(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/mock/mock.py", line 937, in assert_called_with
six.raise_from(AssertionError(_error_message(cause)), cause)
File "/usr/local/lib/python2.7/dist-packages/six.py", line 718, in raise_from
raise value
AssertionError: Expected call: meth(sentinel.a, sentinel.b, sentinel.c, sentinel.d)
Actual call: meth(<mock.tests.testmock.Something object at 0x7f23e456dcd0>, sentinel.a, sentinel.b, sentinel.c, sentinel.d)
Currently, the autospec=True argument can be passed to mock.patch, but when trying to make assertions on the call and its arguments, it can fail, as it expects an instance / class instance reference as the first argument (self / cls arguments are not consumed when autospec-ing).
Steps to reproduce:
ubuntu@ubuntu:/opt/stack/cpython$ ./python
Python 3.7.0a2+ (heads/mock-add-autospec:51a9270, Nov 20 2017, 06:48:44)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from unittest import mock
from unittest.test.testmock import testmock
>>> >>>>>>............<MagicMock name='meth()'id='140281858112024'>
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
File "/opt/stack/cpython/Lib/unittest/mock.py", line 196, in assert_called_once_with
return mock.assert_called_once_with(*args, **kwargs)
File "/opt/stack/cpython/Lib/unittest/mock.py", line 856, in assert_called_once_with
return self.assert_called_with(*args, **kwargs)
File "/opt/stack/cpython/Lib/unittest/mock.py", line 845, in assert_called_with
raise AssertionError(_error_message()) from cause
AssertionError: Expected call: meth(sentinel.a, sentinel.b, sentinel.c, sentinel.d)
Actual call: meth(<unittest.test.testmock.testmock.Something object at 0x7f95ea529a80>, sentinel.a, sentinel.b, sentinel.c, sentinel.d)
@iritkatriel I don't have the ability to reopen this bug, but this is still relevant. Using the same reproducer, albeit with unittest.mock instead of mock.
Activity
bclau commentedon Nov 20, 2017
Currently, the autospec=True argument can be passed to mock.patch, but when trying to make assertions on the call and its arguments, it can fail, as it expects an instance / class instance reference as the first argument (self / cls arguments are not consumed when autospec-ing).
Steps to reproduce:
Expected result: no AssertionError.
bclau commentedon Nov 20, 2017
Currently, the autospec=True argument can be passed to mock.patch, but when trying to make assertions on the call and its arguments, it can fail, as it expects an instance / class instance reference as the first argument (self / cls arguments are not consumed when autospec-ing).
Steps to reproduce:
Expected result: no AssertionError.
iritkatriel commentedon Oct 30, 2022
@BCLAU is this still relevant? The code changed quite a lot since 3.7.
stephenfin commentedon Dec 17, 2025
@iritkatriel I don't have the ability to reopen this bug, but this is still relevant. Using the same reproducer, albeit with
unittest.mockinstead ofmock.Running this with the most recent Python:
We have been carrying a fix for this in https://github.com/openstack/oslotest/ for a long time here. I suspect an upstream solution would look very similar.
pythongh-76273: Fix autospec mocking of instance and class methods
pythongh-76273: Fix autospec mocking of instance and class methods
johnslavik commentedon Mar 27, 2026
Worth checking if this relates to GH-71902.