diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index b0bbc0e0449..67eb0542574 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -1188,7 +1188,7 @@ def __call__(self, function: FixtureFunction) -> FixtureFunction: if getattr(function, "_pytestfixturefunction", False): raise ValueError( - "fixture is being applied more than once to the same function" + f"@pytest.fixture is being applied more than once to the same function {function.__name__!r}" ) if hasattr(function, "pytestmark"): diff --git a/testing/python/fixtures.py b/testing/python/fixtures.py index 35ed2efc5bf..0fb5aa45029 100644 --- a/testing/python/fixtures.py +++ b/testing/python/fixtures.py @@ -4353,6 +4353,27 @@ def fix(): assert fix() == 1 +def test_fixture_double_decorator(pytester: Pytester) -> None: + """Check if an error is raised when using @pytest.fixture twice.""" + pytester.makepyfile( + """ + import pytest + + @pytest.fixture + @pytest.fixture + def fixt(): + pass + """ + ) + result = pytester.runpytest() + result.assert_outcomes(errors=1) + result.stdout.fnmatch_lines( + [ + "E * ValueError: @pytest.fixture is being applied more than once to the same function 'fixt'" + ] + ) + + def test_fixture_param_shadowing(pytester: Pytester) -> None: """Parametrized arguments would be shadowed if a fixture with the same name also exists (#5036)""" pytester.makepyfile(