From 7628f67d55cb65bad9c9266e0457e468cd7e3775 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Thu, 19 Sep 2024 10:55:47 +0300 Subject: gh-123934: Fix `MagicMock` not to reset magic method return values (#124038) --- Lib/unittest/mock.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'Lib/unittest') diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 1fa90277e08..bb34c743604 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -628,7 +628,7 @@ class NonCallableMock(Base): side_effect = property(__get_side_effect, __set_side_effect) - def reset_mock(self, visited=None,*, return_value=False, side_effect=False): + 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 = [] @@ -2218,6 +2218,17 @@ class MagicMock(MagicMixin, Mock): self._mock_add_spec(spec, spec_set) self._mock_set_magics() + def reset_mock(self, /, *args, return_value=False, **kwargs): + if ( + return_value + and self._mock_name + and _is_magic(self._mock_name) + ): + # Don't reset return values for magic methods, + # otherwise `m.__str__` will start + # to return `MagicMock` instances, instead of `str` instances. + return_value = False + super().reset_mock(*args, return_value=return_value, **kwargs) class MagicProxy(Base): -- cgit v1.2.3