Fix getting line number with nasty __getattr__.
When an object has a custom __getattr__ which always returns a non-int, we tried to get compat_co_firstlineno from it and checked it was a integer, which caused an exception if such a class is mistakenly collected. If we still mistakenly collect such a class (which is likely to be something other than a test), we now skip it with a warning (because it probably has an __init__) instead of producing an error. See #1204.
This commit is contained in:
@@ -880,6 +880,21 @@ class TestReportInfo:
|
||||
pass
|
||||
"""
|
||||
|
||||
def test_reportinfo_with_nasty_getattr(self, testdir):
|
||||
# https://github.com/pytest-dev/pytest/issues/1204
|
||||
modcol = testdir.getmodulecol("""
|
||||
# lineno 0
|
||||
class TestClass:
|
||||
def __getattr__(self, name):
|
||||
return "this is not an int"
|
||||
|
||||
def test_foo(self):
|
||||
pass
|
||||
""")
|
||||
classcol = testdir.collect_by_name(modcol, "TestClass")
|
||||
instance = classcol.collect()[0]
|
||||
fspath, lineno, msg = instance.reportinfo()
|
||||
|
||||
|
||||
def test_customized_python_discovery(testdir):
|
||||
testdir.makeini("""
|
||||
|
||||
Reference in New Issue
Block a user