Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9cd39a1

Browse files
committed
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.
1 parent e2e7168 commit 9cd39a1

4 files changed

Lines changed: 36 additions & 3 deletions

File tree

Doc/library/unittest.mock.rst

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ the *new_callable* argument to :func:`patch`.
364364
.. versionadded:: 3.5
365365

366366

367-
.. method:: reset_mock()
367+
.. method:: reset_mock(*, return_value=False, side_effect=False)
368368

369369
The reset_mock method resets all the call attributes on a mock object:
370370

@@ -376,12 +376,20 @@ the *new_callable* argument to :func:`patch`.
376376
>>> mock.called
377377
False
378378

379+
.. versionchanged:: 3.6
380+
Added two keyword only argument to the reset_mock function.
381+
379382
This can be useful where you want to make a series of assertions that
380383
reuse the same object. Note that :meth:`reset_mock` *doesn't* clear the
381384
return value, :attr:`side_effect` or any child attributes you have
382-
set using normal assignment. Child mocks and the return value mock
385+
set using normal assignment by default. In case you want to reset
386+
*return_value* or :attr:`side_effect`, then pass the corresponding
387+
parameter as ``True``. Child mocks and the return value mock
383388
(if any) are reset as well.
384389

390+
.. note:: *return_value*, and :attr:`side_effect` are keyword only
391+
argument.
392+
385393

386394
.. method:: mock_add_spec(spec, spec_set=False)
387395

Lib/unittest/mock.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ def __set_side_effect(self, value):
523523
side_effect = property(__get_side_effect, __set_side_effect)
524524

525525

526-
def reset_mock(self, visited=None):
526+
def reset_mock(self, visited=None,*, return_value=False, side_effect=False):
527527
"Restore the mock object to its initial state."
528528
if visited is None:
529529
visited = []
@@ -538,6 +538,11 @@ def reset_mock(self, visited=None):
538538
self.call_args_list = _CallList()
539539
self.method_calls = _CallList()
540540

541+
if return_value:
542+
self._mock_return_value = DEFAULT
543+
if side_effect:
544+
self._mock_side_effect = None
545+
541546
for child in self._mock_children.values():
542547
if isinstance(child, _SpecState):
543548
continue

Lib/unittest/test/testmock/testmock.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,6 +1277,24 @@ def test_override_tuple_methods(self):
12771277
self.assertEqual(m.method_calls[0], c)
12781278
self.assertEqual(m.method_calls[1], i)
12791279

1280+
def test_reset_return_sideeffect(self):
1281+
m = Mock(return_value=10, side_effect=[2,3])
1282+
m.reset_mock(return_value=True, side_effect=True)
1283+
self.assertIsInstance(m.return_value, Mock)
1284+
self.assertEqual(m.side_effect, None)
1285+
1286+
def test_reset_return(self):
1287+
m = Mock(return_value=10, side_effect=[2,3])
1288+
m.reset_mock(return_value=True)
1289+
self.assertIsInstance(m.return_value, Mock)
1290+
self.assertNotEqual(m.side_effect, None)
1291+
1292+
def test_reset_sideeffect(self):
1293+
m = Mock(return_value=10, side_effect=[2,3])
1294+
m.reset_mock(side_effect=True)
1295+
self.assertEqual(m.return_value, 10)
1296+
self.assertEqual(m.side_effect, None)
1297+
12801298
def test_mock_add_spec(self):
12811299
class _One(object):
12821300
one = 1

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ Library
3636
- Issue #27056: Optimize pickle.load() and pickle.loads(), up to 10% faster
3737
to deserialize a lot of small objects.
3838

39+
- Issue #21271: New keyword only parameters in reset_mock call.
40+
3941
IDLE
4042
----
4143

0 commit comments

Comments
 (0)