From: Ɓukasz Langa Date: Tue, 14 Apr 2015 06:12:42 +0000 (-0700) Subject: Issue #23310: Fix MagicMock's initializer to work with __methods__. X-Git-Tag: v3.5.0a4~65 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a468db9b0bd8d17575923b91db5fbc4a222d4252;p=thirdparty%2FPython%2Fcpython.git Issue #23310: Fix MagicMock's initializer to work with __methods__. Behavior equivalent to m.configure_mock(). Patch by Kasia Jachim. --- diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index 6a0fd5035883..c3ab4e82e897 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -1789,14 +1789,15 @@ def _set_return_value(mock, method, name): class MagicMixin(object): def __init__(self, *args, **kw): + self._mock_set_magics() # make magic work for kwargs in init _safe_super(MagicMixin, self).__init__(*args, **kw) - self._mock_set_magics() + self._mock_set_magics() # fix magic broken by upper level init def _mock_set_magics(self): these_magics = _magics - if self._mock_methods is not None: + if getattr(self, "_mock_methods", None) is not None: these_magics = _magics.intersection(self._mock_methods) remove_magics = set() diff --git a/Lib/unittest/test/testmock/testmagicmethods.py b/Lib/unittest/test/testmock/testmagicmethods.py index 3c53ec4f0e12..bb9b956bb2e4 100644 --- a/Lib/unittest/test/testmock/testmagicmethods.py +++ b/Lib/unittest/test/testmock/testmagicmethods.py @@ -450,5 +450,20 @@ class TestMockingMagicMethods(unittest.TestCase): bar_direct = m.__rdivmod__(2) self.assertIsInstance(bar_direct, MagicMock) + # http://bugs.python.org/issue23310 + # Check if you can change behaviour of magic methds in MagicMock init + def test_magic_in_initialization(self): + m = MagicMock(**{'__str__.return_value': "12"}) + self.assertEqual(str(m), "12") + + def test_changing_magic_set_in_initialization(self): + m = MagicMock(**{'__str__.return_value': "12"}) + m.__str__.return_value = "13" + self.assertEqual(str(m), "13") + m = MagicMock(**{'__str__.return_value': "12"}) + m.configure_mock(**{'__str__.return_value': "14"}) + self.assertEqual(str(m), "14") + + if __name__ == '__main__': unittest.main() diff --git a/Misc/ACKS b/Misc/ACKS index 48d20ef0c337..2a5236e9e5fa 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -849,6 +849,7 @@ Hugo Lopes Tavares Anne Lord Tom Loredo Justin Love +Kasia Jachim Ned Jackson Lovely Chalmer Lowe Jason Lowe diff --git a/Misc/NEWS b/Misc/NEWS index 969da2cc9200..4a9dad8e32d0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -136,6 +136,9 @@ Library - Issue #22117: Fix os.utime(), it now rounds the timestamp towards minus infinity (-inf) instead of rounding towards zero. +- Issue #23310: Fix MagicMock's initializer to work with __methods__, just + like configure_mock(). Patch by Kasia Jachim. + Build -----