mirror of
https://github.com/python/cpython.git
synced 2025-09-28 03:13:48 +00:00
bpo-31177: Skip deleted attributes while calling reset_mock (GH-9302)
This commit is contained in:
parent
989052047e
commit
edeca92c84
3 changed files with 13 additions and 1 deletions
|
@ -542,7 +542,7 @@ class NonCallableMock(Base):
|
||||||
self._mock_side_effect = None
|
self._mock_side_effect = None
|
||||||
|
|
||||||
for child in self._mock_children.values():
|
for child in self._mock_children.values():
|
||||||
if isinstance(child, _SpecState):
|
if isinstance(child, _SpecState) or child is _deleted:
|
||||||
continue
|
continue
|
||||||
child.reset_mock(visited)
|
child.reset_mock(visited)
|
||||||
|
|
||||||
|
|
|
@ -1596,6 +1596,16 @@ class MockTest(unittest.TestCase):
|
||||||
self.assertRaises(AttributeError, getattr, mock, 'f')
|
self.assertRaises(AttributeError, getattr, mock, 'f')
|
||||||
|
|
||||||
|
|
||||||
|
def test_reset_mock_does_not_raise_on_attr_deletion(self):
|
||||||
|
# bpo-31177: reset_mock should not raise AttributeError when attributes
|
||||||
|
# were deleted in a mock instance
|
||||||
|
mock = Mock()
|
||||||
|
mock.child = True
|
||||||
|
del mock.child
|
||||||
|
mock.reset_mock()
|
||||||
|
self.assertFalse(hasattr(mock, 'child'))
|
||||||
|
|
||||||
|
|
||||||
def test_class_assignable(self):
|
def test_class_assignable(self):
|
||||||
for mock in Mock(), MagicMock():
|
for mock in Mock(), MagicMock():
|
||||||
self.assertNotIsInstance(mock, int)
|
self.assertNotIsInstance(mock, int)
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix bug that prevented using :meth:`reset_mock <unittest.mock.Mock.reset_mock>`
|
||||||
|
on mock instances with deleted attributes
|
Loading…
Add table
Add a link
Reference in a new issue