Trivial: Improving error reporting when assert_has_calls fails#8205
Trivial: Improving error reporting when assert_has_calls fails#8205gpshead merged 4 commits intopython:masterfrom
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
| 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.
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.
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.
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.
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.
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.