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

Skip to content

Commit a468db9

Browse files
committed
Issue #23310: Fix MagicMock's initializer to work with __methods__.
Behavior equivalent to m.configure_mock(). Patch by Kasia Jachim.
1 parent cd1aa91 commit a468db9

4 files changed

Lines changed: 22 additions & 2 deletions

File tree

Lib/unittest/mock.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,14 +1789,15 @@ def _set_return_value(mock, method, name):
17891789

17901790
class MagicMixin(object):
17911791
def __init__(self, *args, **kw):
1792+
self._mock_set_magics() # make magic work for kwargs in init
17921793
_safe_super(MagicMixin, self).__init__(*args, **kw)
1793-
self._mock_set_magics()
1794+
self._mock_set_magics() # fix magic broken by upper level init
17941795

17951796

17961797
def _mock_set_magics(self):
17971798
these_magics = _magics
17981799

1799-
if self._mock_methods is not None:
1800+
if getattr(self, "_mock_methods", None) is not None:
18001801
these_magics = _magics.intersection(self._mock_methods)
18011802

18021803
remove_magics = set()

Lib/unittest/test/testmock/testmagicmethods.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,5 +450,20 @@ def test_divmod_and_rdivmod(self):
450450
bar_direct = m.__rdivmod__(2)
451451
self.assertIsInstance(bar_direct, MagicMock)
452452

453+
# http://bugs.python.org/issue23310
454+
# Check if you can change behaviour of magic methds in MagicMock init
455+
def test_magic_in_initialization(self):
456+
m = MagicMock(**{'__str__.return_value': "12"})
457+
self.assertEqual(str(m), "12")
458+
459+
def test_changing_magic_set_in_initialization(self):
460+
m = MagicMock(**{'__str__.return_value': "12"})
461+
m.__str__.return_value = "13"
462+
self.assertEqual(str(m), "13")
463+
m = MagicMock(**{'__str__.return_value': "12"})
464+
m.configure_mock(**{'__str__.return_value': "14"})
465+
self.assertEqual(str(m), "14")
466+
467+
453468
if __name__ == '__main__':
454469
unittest.main()

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,7 @@ Hugo Lopes Tavares
849849
Anne Lord
850850
Tom Loredo
851851
Justin Love
852+
Kasia Jachim
852853
Ned Jackson Lovely
853854
Chalmer Lowe
854855
Jason Lowe

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ Library
136136
- Issue #22117: Fix os.utime(), it now rounds the timestamp towards minus
137137
infinity (-inf) instead of rounding towards zero.
138138

139+
- Issue #23310: Fix MagicMock's initializer to work with __methods__, just
140+
like configure_mock(). Patch by Kasia Jachim.
141+
139142
Build
140143
-----
141144

0 commit comments

Comments
 (0)