From c6325b1c9fe60f72bb3fa4b8570a699e9e97af53 Mon Sep 17 00:00:00 2001 From: andrei kulakov Date: Mon, 7 Nov 2022 02:24:46 -0500 Subject: 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 Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com> --- Lib/test/test_unittest/testmock/testsealable.py | 5 ++++- Lib/unittest/mock.py | 1 + .../next/Library/2022-05-03-11-32-29.gh-issue-91803.pI4Juv.rst | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2022-05-03-11-32-29.gh-issue-91803.pI4Juv.rst 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. -- cgit v0.12