diff -r 2a18f6b85da2 Doc/library/unittest.mock.rst --- a/Doc/library/unittest.mock.rst Sun Apr 12 18:47:56 2015 -0400 +++ b/Doc/library/unittest.mock.rst Mon Apr 13 22:32:05 2015 +0530 @@ -336,7 +336,7 @@ .. versionadded:: 3.5 - .. method:: reset_mock() + .. method:: reset_mock(return_value=False, side_effect=False) The reset_mock method resets all the call attributes on a mock object: @@ -351,7 +351,9 @@ This can be useful where you want to make a series of assertions that reuse the same object. Note that :meth:`reset_mock` *doesn't* clear the return value, :attr:`side_effect` or any child attributes you have - set using normal assignment. Child mocks and the return value mock + set using normal assignment by default. In case you want to reset + return_value or :attr:`side_effect`, then pass the corresponding + parameter as `True`. Child mocks and the return value mock (if any) are reset as well. diff -r 2a18f6b85da2 Lib/unittest/mock.py --- a/Lib/unittest/mock.py Sun Apr 12 18:47:56 2015 -0400 +++ b/Lib/unittest/mock.py Mon Apr 13 22:32:05 2015 +0530 @@ -522,7 +522,7 @@ side_effect = property(__get_side_effect, __set_side_effect) - def reset_mock(self): + def reset_mock(self, return_value=False, side_effect=False): "Restore the mock object to its initial state." self.called = False self.call_args = None @@ -531,6 +531,11 @@ self.call_args_list = _CallList() self.method_calls = _CallList() + if return_value: + self._mock_return_value = DEFAULT + if side_effect: + self._mock_side_effect = None + for child in self._mock_children.values(): if isinstance(child, _SpecState): continue diff -r 2a18f6b85da2 Lib/unittest/test/testmock/testmock.py --- a/Lib/unittest/test/testmock/testmock.py Sun Apr 12 18:47:56 2015 -0400 +++ b/Lib/unittest/test/testmock/testmock.py Mon Apr 13 22:32:05 2015 +0530 @@ -1223,6 +1223,14 @@ self.assertEqual(m.method_calls[0], c) self.assertEqual(m.method_calls[1], i) + #Issue21271 allow resetting return_value and side_effect + def test_reset_return_side(self): + m = Mock(return_value=10, side_effect=[2,3]) + m.reset_mock(return_value=True, side_effect=True) + self.assertIsInstance(m.return_value, Mock) + self.assertEqual(m.side_effect, None) + + def test_mock_add_spec(self): class _One(object): one = 1