Skip to content

How to change the fixture used in case functions. #360

Open
@AlbertoRFer

Description

@AlbertoRFer

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions