mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-75988: Fix issues with autospec ignoring wrapped object (#115223)
* set default return value of functional types as _mock_return_value * added test of wrapping child attributes * added backward compatibility with explicit return * added docs on the order of precedence * added test to check default return_value
This commit is contained in:
parent
7db871e4fa
commit
735fc2cbbc
4 changed files with 199 additions and 2 deletions
|
@ -573,7 +573,7 @@ class NonCallableMock(Base):
|
|||
if self._mock_delegate is not None:
|
||||
ret = self._mock_delegate.return_value
|
||||
|
||||
if ret is DEFAULT:
|
||||
if ret is DEFAULT and self._mock_wraps is None:
|
||||
ret = self._get_child_mock(
|
||||
_new_parent=self, _new_name='()'
|
||||
)
|
||||
|
@ -1234,6 +1234,9 @@ class CallableMixin(Base):
|
|||
if self._mock_return_value is not DEFAULT:
|
||||
return self.return_value
|
||||
|
||||
if self._mock_delegate and self._mock_delegate.return_value is not DEFAULT:
|
||||
return self.return_value
|
||||
|
||||
if self._mock_wraps is not None:
|
||||
return self._mock_wraps(*args, **kwargs)
|
||||
|
||||
|
@ -2785,9 +2788,12 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None,
|
|||
if _parent is not None and not instance:
|
||||
_parent._mock_children[_name] = mock
|
||||
|
||||
wrapped = kwargs.get('wraps')
|
||||
|
||||
if is_type and not instance and 'return_value' not in kwargs:
|
||||
mock.return_value = create_autospec(spec, spec_set, instance=True,
|
||||
_name='()', _parent=mock)
|
||||
_name='()', _parent=mock,
|
||||
wraps=wrapped)
|
||||
|
||||
for entry in dir(spec):
|
||||
if _is_magic(entry):
|
||||
|
@ -2809,6 +2815,9 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None,
|
|||
continue
|
||||
|
||||
kwargs = {'spec': original}
|
||||
# Wrap child attributes also.
|
||||
if wrapped and hasattr(wrapped, entry):
|
||||
kwargs.update(wraps=original)
|
||||
if spec_set:
|
||||
kwargs = {'spec_set': original}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue