bpo-37828: Fix default mock_name in unittest.mock.assert_called error (GH-16166)

In the format string for assert_called the evaluation order is incorrect and hence for mock's without name, 'None' is printed whereas it should be 'mock' like for other messages. The error message is ("Expected '%s' to have been called." % self._mock_name or 'mock').
This commit is contained in:
Abraham Toriz Cruz 2019-09-17 06:16:08 -05:00 committed by Pablo Galindo
parent 219fb9d65e
commit 5f5f11faf9
3 changed files with 11 additions and 1 deletions

View File

@ -868,7 +868,7 @@ class NonCallableMock(Base):
"""
if self.call_count == 0:
msg = ("Expected '%s' to have been called." %
self._mock_name or 'mock')
(self._mock_name or 'mock'))
raise AssertionError(msg)
def assert_called_once(self):

View File

@ -396,6 +396,14 @@ class MockTest(unittest.TestCase):
_check(mock)
def test_assert_called_exception_message(self):
msg = "Expected '{0}' to have been called"
with self.assertRaisesRegex(AssertionError, msg.format('mock')):
Mock().assert_called()
with self.assertRaisesRegex(AssertionError, msg.format('test_name')):
Mock(name="test_name").assert_called()
def test_assert_called_once_with(self):
mock = Mock()
mock()

View File

@ -0,0 +1,2 @@
Fix default mock name in :meth:`unittest.mock.Mock.assert_called` exceptions.
Patch by Abraham Toriz Cruz.