Skip to content

Commit 0518bde

Browse files
andrea-cimatoribus-pix4dsambarluc
authored andcommitted
Fail at parametrize option for empty parameter set
Optionally raise an exception when parametrize collects no arguments. See: pytest-dev#3849
1 parent d12f46c commit 0518bde

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

src/_pytest/mark/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,9 @@ def pytest_configure(config):
163163

164164
empty_parameterset = config.getini(EMPTY_PARAMETERSET_OPTION)
165165

166-
if empty_parameterset not in ("skip", "xfail", None, ""):
166+
if empty_parameterset not in ("skip", "xfail", "fail_at_parametrize", None, ""):
167167
raise UsageError(
168-
"{!s} must be one of skip and xfail,"
168+
"{!s} must be one of skip, xfail or fail_at_parametrize"
169169
" but it is {!r}".format(EMPTY_PARAMETERSET_OPTION, empty_parameterset)
170170
)
171171

src/_pytest/mark/structures.py

+7
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
EMPTY_PARAMETERSET_OPTION = "empty_parameter_set_mark"
1515

1616

17+
class ParametrizeError(Exception):
18+
19+
"""Error collecting arguments in parametrize."""
20+
21+
1722
def alias(name, warning=None):
1823
getter = attrgetter(name)
1924

@@ -37,6 +42,8 @@ def get_empty_parameterset_mark(config, argnames, func):
3742
mark = MARK_GEN.skip
3843
elif requested_mark == "xfail":
3944
mark = MARK_GEN.xfail(run=False)
45+
elif requested_mark == "fail_at_parametrize":
46+
raise ParametrizeError("Empty parameter set")
4047
else:
4148
raise LookupError(requested_mark)
4249
fs, lineno = getfslineno(func)

testing/test_mark.py

+16
Original file line numberDiff line numberDiff line change
@@ -1107,6 +1107,22 @@ def test_parameterset_for_parametrize_marks(testdir, mark):
11071107
assert result_mark.kwargs.get("run") is False
11081108

11091109

1110+
def test_parameterset_for_fail_at_parametrize(testdir):
1111+
testdir.makeini(
1112+
"[pytest]\n{}={}".format(EMPTY_PARAMETERSET_OPTION, "fail_at_parametrize")
1113+
)
1114+
1115+
config = testdir.parseconfig()
1116+
from _pytest.mark import pytest_configure, get_empty_parameterset_mark
1117+
from _pytest.mark.structures import ParametrizeError
1118+
1119+
pytest_configure(config)
1120+
1121+
with pytest.raises(ParametrizeError) as err:
1122+
get_empty_parameterset_mark(config, ["a"], all)
1123+
assert str(err).startswith("Empty parameter set")
1124+
1125+
11101126
def test_parameterset_for_parametrize_bad_markname(testdir):
11111127
with pytest.raises(pytest.UsageError):
11121128
test_parameterset_for_parametrize_marks(testdir, "bad")

0 commit comments

Comments
 (0)