Skip to content

params on Fixtures are silently hidden when the Fixture is shadowed but used #11337

@jgersti

Description

@jgersti

Issue

params on fixtures that are shadowed but used are silently dropped.

Example

@pytest.fixture
def b(a): return a

@pytest.fixture(name="a", params=("inner", "near"))
def a_inner(request):
    return f"#{request.param}"

@pytest.fixture(name="a", params=("outer", "far"))
def a_outer(request, a, b):
    return f"+{request.param} {a} {b}"

def test_nested(a):
    print(a)

this result in something like

> pytest -s -q -vvv
::test_nested[outer]
+outer #outer #outer
PASSED
::test_nested[far]
+far #far #far
PASSED

I expect to atleast get a warning that the params on the inner fixture are overwritten by the paramson the outer one

Note I:

I actually hoped to get all four cases (outer-inner, outer-near, far-inner, far-near), but i guess that wont happen anytime (see Note III)

Note II:

The fixture b is only included to demonstrate that the inner fixture is/can be accessed when necessary.
Increasing the scope on the inner fixture does not change anything.

Note III:

I am aware that the current behaviour (ignoring the params on the inner fixture) is the current way to make indirect parameters in pytest.mark.parametrize work, because pytest.mark.parametrize in effect just shadows fixtures.

Sytem Info:

pytest-7.4.0
win10 & python 3.11

Metadata

Metadata

Assignees

No one assigned

    Labels

    topic: fixturesanything involving fixtures directly or indirectlytopic: parametrizerelated to @pytest.mark.parametrize

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions