Django: повторите тест-кейс с разными приспособлениями

У меня есть Django TestCase, все тесты которого я хотел бы запустить для двух различных наборов данных (в данном случае объект Bike, цвет которого может быть красным или синим).

Выбираю ли я способ загрузки разных светильников или тех же светильников и манипулирую цветом, у меня нет предпочтений.

Смотрите пример ниже:

class TestBike(TestCase):
    fixtures = [
        "testfiles/data/blue_bike.json",
    ]

    def setUp(self, *args, **kwargs):
        self.bike = Bike.objects.get(color="blue")

        run_expensive_commands(self.bike)

    def test_bike_1(self):
        # one of many tests

    def test_bike_2(self):
        # second of many tests

Одним из способов, который я рассматривал, было использование пакета parameterized, но тогда мне пришлось бы parameterize каждый тест и вызывать prepare() функцию из каждого теста. Звучит как куча излишеств.

Другой вариант - многократное наследование теста с различными приспособлениями. Тоже слишком многословный, на мой вкус.

Рассматривали ли вы возможность параметризации на уровне класса, т.е. через атрибут класса?

class TestBikeBase:
    COLOR = ""  # Override in derived class.

    def setUp(self, *args, **kwargs):
        self.bike = Bike.objects.get(color=self.COLOR)

        run_expensive_commands(self.bike)

    def test_bike_1(self):
        # one of many tests

    def test_bike_2(self):
        # second of many tests


class TestRedBike(TestBikeBase, TestCase):
    COLOR = "red"


class TestBlueBike(TestBikeBase, TestCase):
    COLOR = "blue" 
Вернуться на верх