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:
		
						commit
						dc0b4efffa
					
				|  | @ -0,0 +1 @@ | |||
| Improve error message when it is not possible to determine a function's signature. | ||||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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"] | ||||
|     ) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue