Emit warning for broken object

This commit is contained in:
Zac-HD
2019-06-08 12:39:59 +10:00
committed by Zac-HD
parent 4f597f011d
commit c5a549b5bb
3 changed files with 39 additions and 3 deletions

View File

@@ -3,6 +3,7 @@ import inspect
import platform
import sys
import traceback
import warnings
from contextlib import contextmanager
import pytest
@@ -12,6 +13,7 @@ from _pytest._code.code import TerminalRepr
from _pytest.compat import safe_getattr
from _pytest.fixtures import FixtureRequest
from _pytest.outcomes import Skipped
from _pytest.warning_types import PytestWarning
DOCTEST_REPORT_CHOICE_NONE = "none"
DOCTEST_REPORT_CHOICE_CDIFF = "cdiff"
@@ -368,10 +370,18 @@ def _patch_unwrap_mock_aware():
else:
def _mock_aware_unwrap(obj, stop=None):
if stop is None:
return real_unwrap(obj, stop=_is_mocked)
else:
try:
if stop is None or stop is _is_mocked:
return real_unwrap(obj, stop=_is_mocked)
return real_unwrap(obj, stop=lambda obj: _is_mocked(obj) or stop(obj))
except Exception as e:
warnings.warn(
"Got %r when unwrapping %r. This is usually caused "
"by a violation of Python's object protocol; see e.g. "
"https://github.com/pytest-dev/pytest/issues/5080" % (e, obj),
PytestWarning,
)
raise
inspect.unwrap = _mock_aware_unwrap
try: