-
-
Notifications
You must be signed in to change notification settings - Fork 32.3k
Trivial: Improving error reporting when assert_has_calls fails #8205
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
I pinged @1st1 for a second pair of eyeballs and to ponder if there are other places we should improve the assertion error messages. This is a trivial change, not really worthy of a BPO issue. A news entry can be added if we accept this. |
Lib/unittest/mock.py
Outdated
@@ -862,7 +862,8 @@ def assert_has_calls(self, calls, any_order=False): | |||
not_found.append(kall) | |||
if not_found: | |||
raise AssertionError( | |||
'%r not all found in call list' % (tuple(not_found),) | |||
'%r not all found in call list: %r' % (tuple(not_found), | |||
all_calls) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd also include self._mock_name
in the error message, like in https://github.com/python/cpython/pull/8205/files#diff-ff75b1b83c21770847ade91fa5bb2525R829
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What should the message look like? Would it be something along the lines of "%r does not contain all of %r in its call list, found %r instead", where the first format parameter would be self._mock_name or 'mock'?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe so, yes. I just committed and edit from the github UI doing that. awaiting CI test results.
* master: (107 commits) bpo-22057: Clarify eval() documentation (pythonGH-8812) bpo-34318: Convert deprecation warnings to errors in assertRaises() etc. (pythonGH-8623) bpo-22602: Raise an exception in the UTF-7 decoder for ill-formed sequences starting with "+". (pythonGH-8741) bpo-34415: Updated logging.Formatter docstring. (pythonGH-8811) bpo-34432: doc Mention complex and decimal.Decimal on str.format not about locales (pythonGH-8808) bpo-34381: refer to 'Running & Writing Tests' in README.rst (pythonGH-8797) Improve error message when mock.assert_has_calls fails (pythonGH-8205) Warn not to set SIGPIPE to SIG_DFL (python#6773) bpo-34419: selectmodule.c does not compile on HP-UX due to bpo-31938 (pythonGH-8796) bpo-34418: Fix HTTPErrorProcessor documentation (pythonGH-8793) bpo-34391: Fix ftplib test for TLS 1.3 (pythonGH-8787) bpo-34217: Use lowercase for windows headers (pythonGH-8472) bpo-34395: Fix memory leaks caused by incautious usage of PyMem_Resize(). (pythonGH-8756) bpo-34405: Updated to OpenSSL 1.1.0i for Windows builds. (pythonGH-8775) bpo-34384: Fix os.readlink() on Windows (pythonGH-8740) closes bpo-34400: Fix undefined behavior in parsetok(). (pythonGH-4439) bpo-34399: 2048 bits RSA keys and DH params (python#8762) Make regular expressions in test_tasks.py raw strings. (pythonGH-8759) smtplib documentation fixes (pythonGH-8708) Fix misindented yaml in logging how to example (pythonGH-8604) ...
'%r not all found in call list' % (tuple(not_found),) | ||
'%r does not contain all of %r in its call list, ' | ||
'found %r instead' % (self._mock_name or 'mock', | ||
tuple(not_found), all_calls) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure about tuple
here, given that both not_found
and all_calls
are lists as evident from lines 855, 857.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While this change preserved the behavior of the existing code. I don't really think it matters, the error message will be understandable regardless.
Upstream r79310 removed the "Modules" directory from sys.path when Python is running from the build directory on POSIX to fix a unit test (issue python#8205). This seems to have broken the compileall.py done in "make install": it cannot find shared library extension modules at this point in the build (sys.path does not contain DESTDIR/usr/lib(64)/python-2.7/lib-dynload for some reason), leading to the build failing with: Traceback (most recent call last): File "/home/david/rpmbuild/BUILDROOT/python-2.7-0.1.rc2.fc14.x86_64/usr/lib64/python2.7/compileall.py", line 17, in <module> import struct File "/home/david/rpmbuild/BUILDROOT/python-2.7-0.1.rc2.fc14.x86_64/usr/lib64/python2.7/struct.py", line 1, in <module> from _struct import * ImportError: No module named _struct This patch adds the build Modules directory to build path.
Upstream r79310 removed the "Modules" directory from sys.path when Python is running from the build directory on POSIX to fix a unit test (issue python#8205). This seems to have broken the compileall.py done in "make install": it cannot find shared library extension modules at this point in the build (sys.path does not contain DESTDIR/usr/lib(64)/python-2.7/lib-dynload for some reason), leading to the build failing with: Traceback (most recent call last): File "/home/david/rpmbuild/BUILDROOT/python-2.7-0.1.rc2.fc14.x86_64/usr/lib64/python2.7/compileall.py", line 17, in <module> import struct File "/home/david/rpmbuild/BUILDROOT/python-2.7-0.1.rc2.fc14.x86_64/usr/lib64/python2.7/struct.py", line 1, in <module> from _struct import * ImportError: No module named _struct This patch adds the build Modules directory to build path.
No description provided.