You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
from unittest.mock import create_autospec
class X:
@property
def myprop(self):
raise Exception("some bug")
create_autospec(X())
Now you could tell for me to fix X. The problem though is that in my project the problem is much more complex. X is some other class that is being autospeced and the getter touches some mock objects it does not like.
Your environment
CPython versions tested on: 3.10
Operating system and architecture: Windows
Fix
--- a\unittest\mock.py
+++ b\unittest\mock.py
for attr in dir(spec):
- if iscoroutinefunction(getattr(spec, attr, None)):
- _spec_asyncs.append(attr)
+ try::
+ value = getattr(spec, attr, None)
+ except:
+ pass
+ else:
+ if iscoroutinefunction(value):
+ _spec_asyncs.append(attr)
The text was updated successfully, but these errors were encountered:
I don't think property execution is by design. Historically, properties were not executed by creation of a specced Mock. The execution of properties was introduced relatively recently (3.8) along with AsyncMock, not intentionally but as an accidental side effect of looking for async methods. This was a backwards incompatible change at the time, and reported reasonably promptly in #85934. Although we've failed to fix it promptly, it should still be fixed and restored to the long-term established behavior.
I don't think exception-catching is the right answer though; rather we should do something like #22209 to avoid executing the properties in the first place.
Bug report
This crashes. It should not.
Now you could tell for me to fix
X
. The problem though is that in my project the problem is much more complex. X is some other class that is being autospeced and the getter touches some mock objects it does not like.Your environment
Fix
The text was updated successfully, but these errors were encountered: