From 9c3f284de598550be6687964c23fd7599e53b20e Mon Sep 17 00:00:00 2001 From: Xtreak Date: Tue, 26 Feb 2019 03:16:34 +0530 Subject: Autospec functions should propagate mock calls to parent GH-11273 --- Lib/unittest/mock.py | 8 ++++++++ Lib/unittest/test/testmock/testmock.py | 13 +++++++++++++ .../next/Library/2018-12-21-09-54-30.bpo-21478.5gsXtc.rst | 2 ++ 3 files changed, 23 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2018-12-21-09-54-30.bpo-21478.5gsXtc.rst diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index ccbcd35..2ccf0d8 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -321,6 +321,14 @@ class _CallList(list): def _check_and_set_parent(parent, value, name, new_name): + # function passed to create_autospec will have mock + # attribute attached to which parent must be set + if isinstance(value, FunctionTypes): + try: + value = value.mock + except AttributeError: + pass + if not _is_instance_mock(value): return False if ((value._mock_name or value._mock_new_name) or diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py index 04ab522..2ad90ea 100644 --- a/Lib/unittest/test/testmock/testmock.py +++ b/Lib/unittest/test/testmock/testmock.py @@ -1830,5 +1830,18 @@ class MockTest(unittest.TestCase): self.assertEqual(type(call.parent().parent), _Call) + def test_parent_propagation_with_create_autospec(self): + + def foo(a, b): + pass + + mock = Mock() + mock.child = create_autospec(foo) + mock.child(1, 2) + + self.assertRaises(TypeError, mock.child, 1) + self.assertEqual(mock.mock_calls, [call.child(1, 2)]) + + if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2018-12-21-09-54-30.bpo-21478.5gsXtc.rst b/Misc/NEWS.d/next/Library/2018-12-21-09-54-30.bpo-21478.5gsXtc.rst new file mode 100644 index 0000000..1000748 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-12-21-09-54-30.bpo-21478.5gsXtc.rst @@ -0,0 +1,2 @@ +Calls to a child function created with :func:`unittest.mock.create_autospec` +should propagate to the parent. Patch by Karthikeyan Singaravelan. -- cgit v0.12