Skip to content

Support indirect parametrizationΒ #194

Open
@smarie

Description

@smarie

Sometimes a fixture is parametrized with cases using @parametrize_with_cases, but for a specific test one would like to only select a subset of these cases. This would for example solve the need in #188

Indirect parametrization is the answer of pytest to this need. For example :

from pytest_cases import parametrize, fixture

@fixture
@parametrize(a=[0, 1])
def my_fix(a):
    return a * 2

@fixture
@parametrize(b=[0, 10])
def my_fix2(b, my_fix):
    return b + my_fix

def test_foo(my_fix2):
    assert my_fix2 in (0, 2, 10, 12)

@parametrize(my_fix=[2], indirect=True)
def test_foo_indirect(my_fix2):
    assert my_fix2 in (4, 14)

Leads to

test_indirect.py::test_foo[b=0-a=0] 
test_indirect.py::test_foo[b=0-a=1] 
test_indirect.py::test_foo[b=10-a=0] 
test_indirect.py::test_foo[b=10-a=1] 
test_indirect.py::test_foo_indirect[b=0-my_fix=2] 

Apart from the test id that is a bit fiddled with by pytest, the rest works as expected.
See also this article.

Now does this work with @parametrize_with_cases ? Does it work with @parametrize when there is a fixture_ref ? This needs to be investigated, and possibly, fixed

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions