Merge pull request #4196 from nicoddemus/better-signature-error-msg-4026

Improve error message when it is not possible to determine a function's signature
This commit is contained in:
Anthony Sottile 2018-10-18 18:56:55 -07:00 committed by GitHub
commit dc0b4efffa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 2 deletions

View File

@ -0,0 +1 @@
Improve error message when it is not possible to determine a function's signature.

View File

@ -13,7 +13,7 @@ from contextlib import contextmanager
import py
import _pytest
from _pytest.outcomes import TEST_OUTCOME
from _pytest.outcomes import TEST_OUTCOME, fail
from six import text_type
import six
@ -131,9 +131,17 @@ def getfuncargnames(function, is_method=False, cls=None):
# ordered mapping of parameter names to Parameter instances. This
# creates a tuple of the names of the parameters that don't have
# defaults.
try:
parameters = signature(function).parameters
except (ValueError, TypeError) as e:
fail(
"Could not determine arguments of {!r}: {}".format(function, e),
pytrace=False,
)
arg_names = tuple(
p.name
for p in signature(function).parameters.values()
for p in parameters.values()
if (
p.kind is Parameter.POSITIONAL_OR_KEYWORD
or p.kind is Parameter.KEYWORD_ONLY

View File

@ -952,3 +952,23 @@ def test_collect_init_tests(testdir):
"*<Function 'test_foo'>",
]
)
def test_collect_invalid_signature_message(testdir):
"""Check that we issue a proper message when we can't determine the signature of a test
function (#4026).
"""
testdir.makepyfile(
"""
import pytest
class TestCase:
@pytest.fixture
def fix():
pass
"""
)
result = testdir.runpytest()
result.stdout.fnmatch_lines(
["Could not determine arguments of *.fix *: invalid method signature"]
)