python-pytest-cases icon indicating copy to clipboard operation
python-pytest-cases copied to clipboard

How to change the fixture used in case functions.

Open AlbertoRFer opened this issue 8 months ago • 1 comments
trafficstars

I have several cases in a class, all of them have a fixture in common, lets call it fixture1 something like.

@pytest.fixture
def fixture1():
    return "dummy-fixture1"

class CaseFixture:
    def case_1(self, fixture1):
        return f"{fixture1}-case-1"

    def case_2(self, fixture1):
        return f"{fixture1}-case-2"

@parametrize_with_cases("case", cases=CaseFixture)
def test_fixture1(case):
    assert case in ["dummy-fixture1-case-1", "dummy-fixture1-case-2"]

Now for my next test function i could reuse the same cases in CaseFixture if the case functions took a different fixture than fixture1, for example fixture2. The naive way with a lot of code duplication would be:

@pytest.fixture
def fixture1():
    return "dummy-fixture1"

class CaseFixture1:
    def case_1(self, fixture1):
        return f"{fixture1}-case-1"

    def case_2(self, fixture1):
        return f"{fixture1}-case-2"

@pytest.fixture
def fixture2():
    return "dummy-fixture2"

class CaseFixture2:
    def case_1(self, fixture2):
        return f"{fixture2}-case-1"

    def case_2(self, fixture2):
        return f"{fixture2}-case-2"

@parametrize_with_cases("case", cases=CaseFixture1)
def test_fixture1(case):
    assert case in ["dummy-fixture1-case-1", "dummy-fixture1-case-2"]

@parametrize_with_cases("case", cases=CaseFixture2)
def test_fixture2(case):
    assert case in ["dummy-fixture2-case-1", "dummy-fixture2-case-2"]

Is there a way of reuse the cases instead? Something like passing the fixture to use from the test function to the Case class methods?

AlbertoRFer avatar Mar 06 '25 12:03 AlbertoRFer