summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarthikeyan Singaravelan <tir.karthi@gmail.com>2020-04-28 19:22:31 (GMT)
committerGitHub <noreply@github.com>2020-04-28 19:22:31 (GMT)
commit521c8d6806adf0305c158d280ec00cca48e8ab22 (patch)
tree7f2567c05fc21b1ae3e0d1b209a99b0065c2bf12
parentd9a43e20facdf4ad10186f820601c6580e1baa80 (diff)
downloadcpython-521c8d6806adf0305c158d280ec00cca48e8ab22.zip
cpython-521c8d6806adf0305c158d280ec00cca48e8ab22.tar.gz
cpython-521c8d6806adf0305c158d280ec00cca48e8ab22.tar.bz2
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.
-rw-r--r--Lib/unittest/mock.py6
-rw-r--r--Lib/unittest/test/testmock/testmock.py16
-rw-r--r--Misc/NEWS.d/next/Library/2020-04-27-14-48-43.bpo-39966.N5yXUe.rst2
3 files changed, 12 insertions, 12 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index c0178f1..b495a5f 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -2012,12 +2012,6 @@ _side_effect_methods = {
def _set_return_value(mock, method, name):
- # If _mock_wraps is present then attach it so that wrapped object
- # is used for return value is used when called.
- if mock._mock_wraps is not None:
- method._mock_wraps = getattr(mock._mock_wraps, name)
- return
-
fixed = _return_values.get(name, DEFAULT)
if fixed is not DEFAULT:
method.return_value = fixed
diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py
index 9b9e066..ce674e7 100644
--- a/Lib/unittest/test/testmock/testmock.py
+++ b/Lib/unittest/test/testmock/testmock.py
@@ -716,12 +716,16 @@ class MockTest(unittest.TestCase):
def test_magic_method_wraps_dict(self):
+ # bpo-25597: MagicMock with wrap doesn't call wrapped object's
+ # method for magic methods with default values.
data = {'foo': 'bar'}
wrapped_dict = MagicMock(wraps=data)
self.assertEqual(wrapped_dict.get('foo'), 'bar')
- self.assertEqual(wrapped_dict['foo'], 'bar')
- self.assertTrue('foo' in wrapped_dict)
+ # Accessing key gives a MagicMock
+ self.assertIsInstance(wrapped_dict['foo'], MagicMock)
+ # __contains__ method has a default value of False
+ self.assertFalse('foo' in wrapped_dict)
# return_value is non-sentinel and takes precedence over wrapped value.
wrapped_dict.get.return_value = 'return_value'
@@ -732,14 +736,13 @@ class MockTest(unittest.TestCase):
self.assertEqual(wrapped_dict.get('foo'), 'bar')
self.assertEqual(wrapped_dict.get('baz'), None)
- with self.assertRaises(KeyError):
- wrapped_dict['baz']
+ self.assertIsInstance(wrapped_dict['baz'], MagicMock)
self.assertFalse('bar' in wrapped_dict)
data['baz'] = 'spam'
self.assertEqual(wrapped_dict.get('baz'), 'spam')
- self.assertEqual(wrapped_dict['baz'], 'spam')
- self.assertTrue('baz' in wrapped_dict)
+ self.assertIsInstance(wrapped_dict['baz'], MagicMock)
+ self.assertFalse('bar' in wrapped_dict)
del data['baz']
self.assertEqual(wrapped_dict.get('baz'), None)
@@ -759,6 +762,7 @@ class MockTest(unittest.TestCase):
klass = MagicMock(wraps=Foo)
obj = klass()
self.assertEqual(obj.__getitem__(2), 2)
+ self.assertEqual(obj[2], 2)
self.assertEqual(obj.__custom_method__(), "foo")
diff --git a/Misc/NEWS.d/next/Library/2020-04-27-14-48-43.bpo-39966.N5yXUe.rst b/Misc/NEWS.d/next/Library/2020-04-27-14-48-43.bpo-39966.N5yXUe.rst
new file mode 100644
index 0000000..614b452
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-04-27-14-48-43.bpo-39966.N5yXUe.rst
@@ -0,0 +1,2 @@
+Revert bpo-25597. :class:`unittest.mock.MagicMock` with wraps' set uses
+default return values for magic methods.