Skip to content

Commit 907cf3e

Browse files
committed
feat: add --require-unique-paramset-ids option skips pytest internal logic of id generation
1 parent 1999ead commit 907cf3e

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

src/_pytest/python.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
from _pytest.config import Config
5151
from _pytest.config import hookimpl
5252
from _pytest.config.argparsing import Parser
53+
from _pytest.config.exceptions import UsageError
5354
from _pytest.deprecated import check_ispytest
5455
from _pytest.fixtures import FixtureDef
5556
from _pytest.fixtures import FixtureRequest
@@ -911,8 +912,8 @@ def make_unique_parameterset_ids(self) -> list[str | _HiddenParam]:
911912

912913
# Keep only duplicates
913914
duplicates = {k: v for k, v in duplicate_indexs.items() if len(v) > 1}
914-
raise Exception(f"""
915-
Because --require-unique-paramset-ids given, pytest won't
915+
raise UsageError(f"""
916+
Because: require_unique_parameterset_ids is set, pytest won't
916917
attempt to generate unique IDs for parameter sets.
917918
argument values: {self.parametersets}
918919
argument names: {self.argnames}

testing/test_collection.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2036,8 +2036,10 @@ def test_namespace_packages(pytester: Pytester, import_mode: str):
20362036
@pytest.mark.parametrize(
20372037
"parametrize_args, expected_indexs",
20382038
[
2039-
("[1, 1, 3]", "{'1': [[]0, 1[]]}"),
2040-
("[1, 1, 3, 2, 2]", "{'1': [[]0, 1[]], '2': [[]3, 4[]]}"),
2039+
("[(1, 1), (1, 1)]", "{'1-1': [[]0, 1[]]}"),
2040+
("[(1, 1), (1, 2), (1, 1)]", "{'1-1': [[]0, 2[]]}"),
2041+
("[(1, 1), (2, 2), (1, 1)]", "{'1-1': [[]0, 2[]]}"),
2042+
("[(1, 1), (2, 2), (1, 2), (2, 1), (1, 1)]", "{'1-1': [[]0, 4[]]}"),
20412043
],
20422044
)
20432045
def test_option_parametrize_require_unique_paramset_ids(
@@ -2046,8 +2048,8 @@ def test_option_parametrize_require_unique_paramset_ids(
20462048
pytester.makepyfile(
20472049
f"""
20482050
import pytest
2049-
@pytest.mark.parametrize('y', {parametrize_args})
2050-
def test1(y):
2051+
@pytest.mark.parametrize('y, x', {parametrize_args})
2052+
def test1(y, x):
20512053
pass
20522054
"""
20532055
)
@@ -2056,7 +2058,7 @@ def test1(y):
20562058
[
20572059
"E*Because: require_unique_parameterset_ids is set, pytest won't",
20582060
"E*attempt to generate unique IDs for parameter sets.",
2059-
"E*argument names: [[]'y'[]]",
2061+
"E*argument names: [[]'y', 'x'[]]",
20602062
"E*function name: test1",
20612063
"E*test name: test_option_parametrize_require_unique_paramset_ids.py::test1",
20622064
f"E*duplicates: {expected_indexs!s}",

0 commit comments

Comments
 (0)