msg306559 - (view) |
Author: Claudiu Belu (cbelu) * |
Date: 2017-11-20 15:50 |
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) ... Traceback (most recent call last): File "", line 4, in 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) Expected result: no AssertionError. |
|
|
msg306560 - (view) |
Author: Claudiu Belu (cbelu) * |
Date: 2017-11-20 15:58 |
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 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) >>> >>> >>> ... ... ... ... Traceback (most recent call last): File "", line 4, in 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. |
|
|