bpo-31177: Skip deleted attributes while calling reset_mock (GH-9302)

This commit is contained in:
Xtreak 2018-12-01 15:33:54 +05:30 committed by Victor Stinner
parent 989052047e
commit edeca92c84
3 changed files with 13 additions and 1 deletions

View File

@ -542,7 +542,7 @@ class NonCallableMock(Base):
self._mock_side_effect = None
for child in self._mock_children.values():
if isinstance(child, _SpecState):
if isinstance(child, _SpecState) or child is _deleted:
continue
child.reset_mock(visited)

View File

@ -1596,6 +1596,16 @@ class MockTest(unittest.TestCase):
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):
for mock in Mock(), MagicMock():
self.assertNotIsInstance(mock, int)

View File

@ -0,0 +1,2 @@
Fix bug that prevented using :meth:`reset_mock <unittest.mock.Mock.reset_mock>`
on mock instances with deleted attributes