Issue #23310: Fix MagicMock's initializer to work with __methods__.

Behavior equivalent to m.configure_mock().  Patch by Kasia Jachim.
This commit is contained in:
Łukasz Langa 2015-04-13 23:12:42 -07:00
parent cd1aa9158e
commit a468db9b0b
4 changed files with 22 additions and 2 deletions

View file

@ -1789,14 +1789,15 @@ def _set_return_value(mock, method, name):
class MagicMixin(object): class MagicMixin(object):
def __init__(self, *args, **kw): def __init__(self, *args, **kw):
self._mock_set_magics() # make magic work for kwargs in init
_safe_super(MagicMixin, self).__init__(*args, **kw) _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): def _mock_set_magics(self):
these_magics = _magics 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) these_magics = _magics.intersection(self._mock_methods)
remove_magics = set() remove_magics = set()

View file

@ -450,5 +450,20 @@ class TestMockingMagicMethods(unittest.TestCase):
bar_direct = m.__rdivmod__(2) bar_direct = m.__rdivmod__(2)
self.assertIsInstance(bar_direct, MagicMock) 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__': if __name__ == '__main__':
unittest.main() unittest.main()

View file

@ -849,6 +849,7 @@ Hugo Lopes Tavares
Anne Lord Anne Lord
Tom Loredo Tom Loredo
Justin Love Justin Love
Kasia Jachim
Ned Jackson Lovely Ned Jackson Lovely
Chalmer Lowe Chalmer Lowe
Jason Lowe Jason Lowe

View file

@ -136,6 +136,9 @@ Library
- Issue #22117: Fix os.utime(), it now rounds the timestamp towards minus - Issue #22117: Fix os.utime(), it now rounds the timestamp towards minus
infinity (-inf) instead of rounding towards zero. 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 Build
----- -----