mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00
Autospec functions should propagate mock calls to parent GH-11273
This commit is contained in:
parent
f1b9abe35f
commit
9c3f284de5
3 changed files with 23 additions and 0 deletions
|
@ -321,6 +321,14 @@ class _CallList(list):
|
||||||
|
|
||||||
|
|
||||||
def _check_and_set_parent(parent, value, name, new_name):
|
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):
|
if not _is_instance_mock(value):
|
||||||
return False
|
return False
|
||||||
if ((value._mock_name or value._mock_new_name) or
|
if ((value._mock_name or value._mock_new_name) or
|
||||||
|
|
|
@ -1830,5 +1830,18 @@ class MockTest(unittest.TestCase):
|
||||||
self.assertEqual(type(call.parent().parent), _Call)
|
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__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -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.
|
Loading…
Add table
Add a link
Reference in a new issue