diff --git a/CHANGELOG b/CHANGELOG index 9e5732021..6e9ad833e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -60,6 +60,8 @@ - allow to override parametrized fixtures with non-parametrized ones and vice versa (bubenkoff). +- fix issue463: raise specific error for 'parameterize' misspelling (pfctdayelise). + 2.6.4 ---------- diff --git a/_pytest/mark.py b/_pytest/mark.py index b9dbe6a7c..a619f96ca 100644 --- a/_pytest/mark.py +++ b/_pytest/mark.py @@ -1,6 +1,11 @@ """ generic mechanism for marking and selecting python functions. """ import py +class MarkerError(Exception): + """ + Error in use of a pytest marker/attribute. + """ + def pytest_namespace(): return {'mark': MarkGenerator()} diff --git a/_pytest/python.py b/_pytest/python.py index 81a6373d4..5766768ed 100644 --- a/_pytest/python.py +++ b/_pytest/python.py @@ -4,7 +4,7 @@ import py import inspect import sys import pytest -from _pytest.mark import MarkDecorator +from _pytest.mark import MarkDecorator, MarkerError from py._code.code import TerminalRepr import _pytest @@ -142,6 +142,10 @@ def pytest_cmdline_main(config): def pytest_generate_tests(metafunc): + # this misspelling is common - raise a specific error to alert the user + if hasattr(metafunc.function, 'parameterize'): + msg = "{0} has 'parameterize', spelling should be 'parametrize'" + raise MarkerError(msg.format(metafunc.function.__name__)) try: markers = metafunc.function.parametrize except AttributeError: diff --git a/testing/python/metafunc.py b/testing/python/metafunc.py index 651e3846e..cbff9adfe 100644 --- a/testing/python/metafunc.py +++ b/testing/python/metafunc.py @@ -692,6 +692,21 @@ class TestMetafuncFunctional: reprec = testdir.inline_run() reprec.assertoutcome(passed=4) + @pytest.mark.issue463 + def test_parameterize_misspelling(self, testdir): + testdir.makepyfile(""" + import pytest + + @pytest.mark.parameterize("x", range(2)) + def test_foo(x): + pass + """) + reprec = testdir.inline_run('--collectonly') + failures = reprec.getfailures() + assert len(failures) == 1 + expectederror = "MarkerError: test_foo has 'parameterize', spelling should be 'parametrize'" + assert expectederror in failures[0].longrepr.reprcrash.message + class TestMarkersWithParametrization: pytestmark = pytest.mark.issue308