summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2018-12-01 10:16:27 (GMT)
committerGitHub <noreply@github.com>2018-12-01 10:16:27 (GMT)
commitc0566e0ff6c2dd1a8b814ecd65649605c090527b (patch)
tree9ccd36a5276b9cb34228adab21a750d631ae7317
parent6c3f272b01c5d327e97f65115217e283103f7c66 (diff)
downloadcpython-c0566e0ff6c2dd1a8b814ecd65649605c090527b.zip
cpython-c0566e0ff6c2dd1a8b814ecd65649605c090527b.tar.gz
cpython-c0566e0ff6c2dd1a8b814ecd65649605c090527b.tar.bz2
bpo-31177: Skip deleted attributes while calling reset_mock (GH-9302)
(cherry picked from commit edeca92c84a3b08902ecdfe987cde00c7e617887) Co-authored-by: Xtreak <tirkarthi@users.noreply.github.com>
-rw-r--r--Lib/unittest/mock.py2
-rw-r--r--Lib/unittest/test/testmock/testmock.py10
-rw-r--r--Misc/NEWS.d/next/Library/2018-09-14-10-38-18.bpo-31177.Sv91TN.rst2
3 files changed, 13 insertions, 1 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 31b1985..4bb0c32 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -543,7 +543,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)
diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py
index b64c866..4601136 100644
--- a/Lib/unittest/test/testmock/testmock.py
+++ b/Lib/unittest/test/testmock/testmock.py
@@ -1556,6 +1556,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)
diff --git a/Misc/NEWS.d/next/Library/2018-09-14-10-38-18.bpo-31177.Sv91TN.rst b/Misc/NEWS.d/next/Library/2018-09-14-10-38-18.bpo-31177.Sv91TN.rst
new file mode 100644
index 0000000..f385571
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-09-14-10-38-18.bpo-31177.Sv91TN.rst
@@ -0,0 +1,2 @@
+Fix bug that prevented using :meth:`reset_mock <unittest.mock.Mock.reset_mock>`
+on mock instances with deleted attributes