[Python-checkins] cpython: Issue #21271: Adds new keyword only parameters in reset_mock call

kushal.das python-checkins at python.org
Thu Jun 2 13:21:40 EDT 2016


https://hg.python.org/cpython/rev/b110dd3d6cea
changeset: 101598:b110dd3d6cea
parent: 101596:0ddba0abab49
user: Kushal Das <kushaldas at gmail.com>
date: Thu Jun 02 10:20:16 2016 -0700
summary:
 Issue #21271: Adds new keyword only parameters in reset_mock call
We now have two keyword only parameters in the reset_mock function to
selectively reset the return_value or the side_effects, or both.
files:
 Doc/library/unittest.mock.rst | 12 +++++++-
 Lib/unittest/mock.py | 7 ++++-
 Lib/unittest/test/testmock/testmock.py | 18 ++++++++++++++
 Misc/NEWS | 2 +
 4 files changed, 36 insertions(+), 3 deletions(-)
diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst
--- a/Doc/library/unittest.mock.rst
+++ b/Doc/library/unittest.mock.rst
@@ -364,7 +364,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:
 
@@ -376,12 +376,20 @@
 >>> mock.called
 False
 
+ .. versionchanged:: 3.6
+ Added two keyword only argument to the reset_mock function.
+
 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.
 
+ .. note:: *return_value*, and :attr:`side_effect` are keyword only
+ argument.
+
 
 .. method:: mock_add_spec(spec, spec_set=False)
 
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -523,7 +523,7 @@
 side_effect = property(__get_side_effect, __set_side_effect)
 
 
- def reset_mock(self, visited=None):
+ def reset_mock(self, visited=None,*, return_value=False, side_effect=False):
 "Restore the mock object to its initial state."
 if visited is None:
 visited = []
@@ -538,6 +538,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 --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py
--- a/Lib/unittest/test/testmock/testmock.py
+++ b/Lib/unittest/test/testmock/testmock.py
@@ -1277,6 +1277,24 @@
 self.assertEqual(m.method_calls[0], c)
 self.assertEqual(m.method_calls[1], i)
 
+ def test_reset_return_sideeffect(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_reset_return(self):
+ m = Mock(return_value=10, side_effect=[2,3])
+ m.reset_mock(return_value=True)
+ self.assertIsInstance(m.return_value, Mock)
+ self.assertNotEqual(m.side_effect, None)
+
+ def test_reset_sideeffect(self):
+ m = Mock(return_value=10, side_effect=[2,3])
+ m.reset_mock(side_effect=True)
+ self.assertEqual(m.return_value, 10)
+ self.assertEqual(m.side_effect, None)
+
 def test_mock_add_spec(self):
 class _One(object):
 one = 1
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -36,6 +36,8 @@
 - Issue #27056: Optimize pickle.load() and pickle.loads(), up to 10% faster
 to deserialize a lot of small objects.
 
+- Issue #21271: New keyword only parameters in reset_mock call.
+
 IDLE
 ----
 
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /