summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorMichael Foord <michael@voidspace.org.uk>2012-06-09 16:31:59 (GMT)
committerMichael Foord <michael@voidspace.org.uk>2012-06-09 16:31:59 (GMT)
commit75963643b178f9d72d3b6bb02d136d67c9cc6d3e (patch)
treebfb5554802f021c2686f505120312f87bf09574d /Lib
parentafc0c77b421baf8ac2376e563dd9be25e1e1eb63 (diff)
downloadcpython-75963643b178f9d72d3b6bb02d136d67c9cc6d3e.zip
cpython-75963643b178f9d72d3b6bb02d136d67c9cc6d3e.tar.gz
cpython-75963643b178f9d72d3b6bb02d136d67c9cc6d3e.tar.bz2
Fix exception when calling reset_mock on a mock created with autospec
Diffstat (limited to 'Lib')
-rw-r--r--Lib/unittest/mock.py3
-rw-r--r--Lib/unittest/test/testmock/testhelpers.py7
-rw-r--r--Lib/unittest/test/testmock/testmagicmethods.py8
3 files changed, 18 insertions, 0 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 36be0fd..4ae3d16 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -510,6 +510,8 @@ class NonCallableMock(Base):
self.method_calls = _CallList()
for child in self._mock_children.values():
+ if isinstance(child, _SpecState):
+ continue
child.reset_mock()
ret = self._mock_return_value
@@ -664,6 +666,7 @@ class NonCallableMock(Base):
# but not method calls
_check_and_set_parent(self, value, None, name)
setattr(type(self), name, value)
+ self._mock_children[name] = value
elif name == '__class__':
self._spec_class = value
return
diff --git a/Lib/unittest/test/testmock/testhelpers.py b/Lib/unittest/test/testmock/testhelpers.py
index 7a7145e..8bfb293 100644
--- a/Lib/unittest/test/testmock/testhelpers.py
+++ b/Lib/unittest/test/testmock/testhelpers.py
@@ -355,6 +355,13 @@ class SpecSignatureTest(unittest.TestCase):
self.assertEqual(mock(), 'foo')
+ def test_autospec_reset_mock(self):
+ m = create_autospec(int)
+ int(m)
+ m.reset_mock()
+ self.assertEqual(m.__int__.call_count, 0)
+
+
def test_mocking_unbound_methods(self):
class Foo(object):
def foo(self, foo):
diff --git a/Lib/unittest/test/testmock/testmagicmethods.py b/Lib/unittest/test/testmock/testmagicmethods.py
index bd52e25..2bcf088 100644
--- a/Lib/unittest/test/testmock/testmagicmethods.py
+++ b/Lib/unittest/test/testmock/testmagicmethods.py
@@ -345,6 +345,14 @@ class TestMockingMagicMethods(unittest.TestCase):
self.assertEqual(mock[1][2][3], 3)
+ def test_magic_method_reset_mock(self):
+ mock = MagicMock()
+ str(mock)
+ self.assertTrue(mock.__str__.called)
+ mock.reset_mock()
+ self.assertFalse(mock.__str__.called)
+
+
def test_dir(self):
# overriding the default implementation
for mock in Mock(), MagicMock():