Fix exception when calling reset_mock on a mock created with autospec
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 @@
         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 @@
                 # 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 @@
         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 @@
         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():