[issue32092] mock.patch with autospec does not consume self / cls argument

Claudiu Belu report at bugs.python.org
Mon Nov 20 10:58:04 EST 2017


Claudiu Belu <cbelu at cloudbasesolutions.com> added the comment:

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 at 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

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='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)

Expected result: no AssertionError.

----------

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue32092>
_______________________________________


More information about the Python-bugs-list mailing list