mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-113569: Display calls in Mock.assert_has_calls failure when empty (GH-113573)
This commit is contained in:
parent
1ae7ceba29
commit
1600d78e2d
3 changed files with 28 additions and 18 deletions
|
@ -1547,25 +1547,33 @@ class MockTest(unittest.TestCase):
|
|||
mock = Mock(spec=f)
|
||||
mock(1)
|
||||
|
||||
with self.assertRaisesRegex(
|
||||
AssertionError,
|
||||
'^{}$'.format(
|
||||
re.escape('Calls not found.\n'
|
||||
'Expected: [call()]\n'
|
||||
' Actual: [call(1)]'))) as cm:
|
||||
with self.assertRaises(AssertionError) as cm:
|
||||
mock.assert_has_calls([call()])
|
||||
self.assertEqual(str(cm.exception),
|
||||
'Calls not found.\n'
|
||||
'Expected: [call()]\n'
|
||||
' Actual: [call(1)]'
|
||||
)
|
||||
self.assertIsNone(cm.exception.__cause__)
|
||||
|
||||
uncalled_mock = Mock()
|
||||
with self.assertRaises(AssertionError) as cm:
|
||||
uncalled_mock.assert_has_calls([call()])
|
||||
self.assertEqual(str(cm.exception),
|
||||
'Calls not found.\n'
|
||||
'Expected: [call()]\n'
|
||||
' Actual: []'
|
||||
)
|
||||
self.assertIsNone(cm.exception.__cause__)
|
||||
|
||||
with self.assertRaisesRegex(
|
||||
AssertionError,
|
||||
'^{}$'.format(
|
||||
re.escape(
|
||||
'Error processing expected calls.\n'
|
||||
"Errors: [None, TypeError('too many positional arguments')]\n"
|
||||
"Expected: [call(), call(1, 2)]\n"
|
||||
' Actual: [call(1)]'))) as cm:
|
||||
with self.assertRaises(AssertionError) as cm:
|
||||
mock.assert_has_calls([call(), call(1, 2)])
|
||||
self.assertEqual(str(cm.exception),
|
||||
'Error processing expected calls.\n'
|
||||
"Errors: [None, TypeError('too many positional arguments')]\n"
|
||||
'Expected: [call(), call(1, 2)]\n'
|
||||
' Actual: [call(1)]'
|
||||
)
|
||||
self.assertIsInstance(cm.exception.__cause__, TypeError)
|
||||
|
||||
def test_assert_any_call(self):
|
||||
|
|
|
@ -1010,8 +1010,8 @@ class NonCallableMock(Base):
|
|||
for e in expected])
|
||||
raise AssertionError(
|
||||
f'{problem}\n'
|
||||
f'Expected: {_CallList(calls)}'
|
||||
f'{self._calls_repr(prefix=" Actual").rstrip(".")}'
|
||||
f'Expected: {_CallList(calls)}\n'
|
||||
f' Actual: {safe_repr(self.mock_calls)}'
|
||||
) from cause
|
||||
return
|
||||
|
||||
|
@ -1085,7 +1085,7 @@ class NonCallableMock(Base):
|
|||
return klass(**kw)
|
||||
|
||||
|
||||
def _calls_repr(self, prefix="Calls"):
|
||||
def _calls_repr(self):
|
||||
"""Renders self.mock_calls as a string.
|
||||
|
||||
Example: "\nCalls: [call(1), call(2)]."
|
||||
|
@ -1095,7 +1095,7 @@ class NonCallableMock(Base):
|
|||
"""
|
||||
if not self.mock_calls:
|
||||
return ""
|
||||
return f"\n{prefix}: {safe_repr(self.mock_calls)}."
|
||||
return f"\nCalls: {safe_repr(self.mock_calls)}."
|
||||
|
||||
|
||||
# Denylist for forbidden attribute names in safe mode
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue