diff options
author | andrei kulakov <andrei.avk@gmail.com> | 2022-11-07 07:24:46 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-07 07:24:46 (GMT) |
commit | c6325b1c9fe60f72bb3fa4b8570a699e9e97af53 (patch) | |
tree | 05a9eefebd36ee790af947636a63aede36b32908 | |
parent | 728e42fcf51cbb2108caf1382df224c13b53d024 (diff) | |
download | cpython-c6325b1c9fe60f72bb3fa4b8570a699e9e97af53.zip cpython-c6325b1c9fe60f72bb3fa4b8570a699e9e97af53.tar.gz cpython-c6325b1c9fe60f72bb3fa4b8570a699e9e97af53.tar.bz2 |
gh-91803: Mock - fix error when using autospec methods with seal (#92213)
Fixes https://github.com/python/cpython/issues/91803.
Co-authored-by: Karthikeyan Singaravelan <tir.karthi@gmail.com>
Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
-rw-r--r-- | Lib/test/test_unittest/testmock/testsealable.py | 5 | ||||
-rw-r--r-- | Lib/unittest/mock.py | 1 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2022-05-03-11-32-29.gh-issue-91803.pI4Juv.rst | 3 |
3 files changed, 8 insertions, 1 deletions
diff --git a/Lib/test/test_unittest/testmock/testsealable.py b/Lib/test/test_unittest/testmock/testsealable.py index daba2b4..e0c3829 100644 --- a/Lib/test/test_unittest/testmock/testsealable.py +++ b/Lib/test/test_unittest/testmock/testsealable.py @@ -200,6 +200,9 @@ class TestSealable(unittest.TestCase): self.assertIsInstance(foo.Baz.baz, mock.NonCallableMagicMock) self.assertIsInstance(foo.Baz.ban, mock.MagicMock) + # see gh-91803 + self.assertIsInstance(foo.bar2(), mock.MagicMock) + self.assertEqual(foo.bar1(), 'a') foo.bar1.return_value = 'new_a' self.assertEqual(foo.bar1(), 'new_a') @@ -212,7 +215,7 @@ class TestSealable(unittest.TestCase): with self.assertRaises(AttributeError): foo.bar = 1 with self.assertRaises(AttributeError): - foo.bar2() + foo.bar2().x foo.bar2.return_value = 'bar2' self.assertEqual(foo.bar2(), 'bar2') diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index b8f4e57..096b1a5 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -2745,6 +2745,7 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None, _new_parent=parent, **kwargs) mock._mock_children[entry] = new + new.return_value = child_klass() _check_signature(original, new, skipfirst=skipfirst) # so functions created with _set_signature become instance attributes, diff --git a/Misc/NEWS.d/next/Library/2022-05-03-11-32-29.gh-issue-91803.pI4Juv.rst b/Misc/NEWS.d/next/Library/2022-05-03-11-32-29.gh-issue-91803.pI4Juv.rst new file mode 100644 index 0000000..14829e8 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-05-03-11-32-29.gh-issue-91803.pI4Juv.rst @@ -0,0 +1,3 @@ +Fix an error when using a method of objects mocked with +:func:`unittest.mock.create_autospec` after it was sealed with +:func:`unittest.mock.seal` function. |