summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2024-06-19 20:35:11 (GMT)
committerGitHub <noreply@github.com>2024-06-19 20:35:11 (GMT)
commit1e4815692f6c8a37a3974d0d7d2025494d026d76 (patch)
tree4d539071e6d30dbf6e60ad286b8cc9b57fc6134d
parented5ae6c4d76feaff06c2104c8ff864553b000253 (diff)
downloadcpython-1e4815692f6c8a37a3974d0d7d2025494d026d76.zip
cpython-1e4815692f6c8a37a3974d0d7d2025494d026d76.tar.gz
cpython-1e4815692f6c8a37a3974d0d7d2025494d026d76.tar.bz2
gh-120732: Fix `name` passing to `Mock`, when using kwargs to `create_autospec` (#120737)
-rw-r--r--Lib/test/test_unittest/testmock/testmock.py5
-rw-r--r--Lib/unittest/mock.py13
-rw-r--r--Misc/NEWS.d/next/Library/2024-06-19-15-06-58.gh-issue-120732.OvYV9b.rst2
3 files changed, 13 insertions, 7 deletions
diff --git a/Lib/test/test_unittest/testmock/testmock.py b/Lib/test/test_unittest/testmock/testmock.py
index 77f6f1e..e1b108f 100644
--- a/Lib/test/test_unittest/testmock/testmock.py
+++ b/Lib/test/test_unittest/testmock/testmock.py
@@ -129,6 +129,11 @@ class MockTest(unittest.TestCase):
# pass kwargs with respect to the parent mock.
self.assertEqual(class_mock().return_value.meth.side_effect, None)
+ def test_create_autospec_correctly_handles_name(self):
+ class X: ...
+ mock = create_autospec(X, spec_set=True, name="Y")
+ self.assertEqual(mock._mock_name, "Y")
+
def test_repr(self):
mock = Mock(name='foo')
self.assertIn('foo', repr(mock))
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 08975e0..d50535d 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -2755,6 +2755,12 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None,
if not unsafe:
_check_spec_arg_typos(kwargs)
+ _name = kwargs.pop('name', _name)
+ _new_name = _name
+ if _parent is None:
+ # for a top level object no _new_name should be set
+ _new_name = ''
+
_kwargs.update(kwargs)
Klass = MagicMock
@@ -2772,13 +2778,6 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None,
elif is_type and instance and not _instance_callable(spec):
Klass = NonCallableMagicMock
- _name = _kwargs.pop('name', _name)
-
- _new_name = _name
- if _parent is None:
- # for a top level object no _new_name should be set
- _new_name = ''
-
mock = Klass(parent=_parent, _new_parent=_parent, _new_name=_new_name,
name=_name, **_kwargs)
diff --git a/Misc/NEWS.d/next/Library/2024-06-19-15-06-58.gh-issue-120732.OvYV9b.rst b/Misc/NEWS.d/next/Library/2024-06-19-15-06-58.gh-issue-120732.OvYV9b.rst
new file mode 100644
index 0000000..e31c4dd
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-06-19-15-06-58.gh-issue-120732.OvYV9b.rst
@@ -0,0 +1,2 @@
+Fix ``name`` passing to :class:`unittest.mock.Mock` object when using
+:func:`unittest.mock.create_autospec`.