diff options
author | Karthikeyan Singaravelan <tir.karthi@gmail.com> | 2020-04-28 19:22:31 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-28 19:22:31 (GMT) |
commit | 521c8d6806adf0305c158d280ec00cca48e8ab22 (patch) | |
tree | 7f2567c05fc21b1ae3e0d1b209a99b0065c2bf12 | |
parent | d9a43e20facdf4ad10186f820601c6580e1baa80 (diff) | |
download | cpython-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.py | 6 | ||||
-rw-r--r-- | Lib/unittest/test/testmock/testmock.py | 16 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-04-27-14-48-43.bpo-39966.N5yXUe.rst | 2 |
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. |