Skip to content

Commit c627515

Browse files
tirkarthicjw296
authored andcommitted
bpo-39966: Revert "bpo-25597: Ensure wraps' return value is used for magic methods in MagicMock" (GH-19734)
* Revert "bpo-25597: Ensure wraps' return value is used for magic methods in MagicMock (#16029)" This reverts commit 72b1004657e60c900e4cd031b2635b587f4b280e. Backports: 521c8d6806adf0305c158d280ec00cca48e8ab22 Signed-off-by: Chris Withers <[email protected]>
1 parent 902eea1 commit c627515

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Revert bpo-25597. :class:`unittest.mock.MagicMock` with wraps' set uses
2+
default return values for magic methods.

mock/mock.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2025,12 +2025,6 @@ def __aiter__():
20252025

20262026

20272027
def _set_return_value(mock, method, name):
2028-
# If _mock_wraps is present then attach it so that wrapped object
2029-
# is used for return value is used when called.
2030-
if mock._mock_wraps is not None:
2031-
method._mock_wraps = getattr(mock._mock_wraps, name)
2032-
return
2033-
20342028
fixed = _return_values.get(name, DEFAULT)
20352029
if fixed is not DEFAULT:
20362030
method.return_value = fixed

mock/tests/testmock.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -716,12 +716,16 @@ def method(self): pass
716716

717717

718718
def test_magic_method_wraps_dict(self):
719+
# bpo-25597: MagicMock with wrap doesn't call wrapped object's
720+
# method for magic methods with default values.
719721
data = {'foo': 'bar'}
720722

721723
wrapped_dict = MagicMock(wraps=data)
722724
self.assertEqual(wrapped_dict.get('foo'), 'bar')
723-
self.assertEqual(wrapped_dict['foo'], 'bar')
724-
self.assertTrue('foo' in wrapped_dict)
725+
# Accessing key gives a MagicMock
726+
self.assertIsInstance(wrapped_dict['foo'], MagicMock)
727+
# __contains__ method has a default value of False
728+
self.assertFalse('foo' in wrapped_dict)
725729

726730
# return_value is non-sentinel and takes precedence over wrapped value.
727731
wrapped_dict.get.return_value = 'return_value'
@@ -732,14 +736,13 @@ def test_magic_method_wraps_dict(self):
732736
self.assertEqual(wrapped_dict.get('foo'), 'bar')
733737

734738
self.assertEqual(wrapped_dict.get('baz'), None)
735-
with self.assertRaises(KeyError):
736-
wrapped_dict['baz']
739+
self.assertIsInstance(wrapped_dict['baz'], MagicMock)
737740
self.assertFalse('bar' in wrapped_dict)
738741

739742
data['baz'] = 'spam'
740743
self.assertEqual(wrapped_dict.get('baz'), 'spam')
741-
self.assertEqual(wrapped_dict['baz'], 'spam')
742-
self.assertTrue('baz' in wrapped_dict)
744+
self.assertIsInstance(wrapped_dict['baz'], MagicMock)
745+
self.assertFalse('bar' in wrapped_dict)
743746

744747
del data['baz']
745748
self.assertEqual(wrapped_dict.get('baz'), None)
@@ -759,6 +762,7 @@ def __custom_method__(self):
759762
klass = MagicMock(wraps=Foo)
760763
obj = klass()
761764
self.assertEqual(obj.__getitem__(2), 2)
765+
self.assertEqual(obj[2], 2)
762766
self.assertEqual(obj.__custom_method__(), "foo")
763767

764768

0 commit comments

Comments
 (0)