-
-
Notifications
You must be signed in to change notification settings - Fork 31.6k
mock raises exception when using a spec with an attribute that raises exception on access #89917
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
In Python 3.8 and later creating a mock with a spec specifying an object containing a property that happens to raise an exception when accessed will fail, because _mock_add_spec calls getattr() on every attribute of the spec. This did not happen in Python 3.6/3.7. This is likely a fairly unusual scenario (and in the particular case where I encountered this I could just use a class instead of an instance for the spec), but it was surprising. For example: # cat test.py
from unittest import mock
class Foo:
@property
def bar(self) -> str:
raise Exception('xxx')
m = mock.MagicMock(spec=Foo()) # python3.11 test.py
Traceback (most recent call last):
File "/root/test.py", line 8, in <module>
m = mock.MagicMock(spec=Foo())
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/unittest/mock.py", line 2069, in __init__
_safe_super(MagicMixin, self).__init__(*args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/unittest/mock.py", line 1087, in __init__
_safe_super(CallableMixin, self).__init__(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/unittest/mock.py", line 442, in __init__
self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/unittest/mock.py", line 497, in _mock_add_spec
if iscoroutinefunction(getattr(spec, attr, None)):
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/test.py", line 6, in bar
raise Exception('xxx')
^^^^^^^^^^^^^^^^^^^^^^
Exception: xxx |
I think I encountered this when trying to mock |
This seems to be similar to https://bugs.python.org/issue41768 . |
Closing as duplicate of #85934 |
@property
descrs while creating mock autospecs #29901Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: