Я пишу тесты для базового класса и его подклассов.
Это выглядит примерно так:
@pytest.fixture()
def bc()
return BaseClass(...)
@pytest.mark.parametrize('param1,param2', [...])
def test_baseclass_func1(bc, param1, param2):
assert ...
@pytest.mark.parametrize('param1,param2', [...])
def test_baseclass_func2(bc, param1, param2):
assert ...
@pytest.mark.parametrize('param1,param2', [xyz])
def test_baseclass_func3(bc, param1, param2):
assert ...
@pytest.mark.parametrize('param1,param2', [xyz])
def test_subclass1_func3(param1, param2):
sc1 = SubClass1(...)
assert ...
@pytest.mark.parametrize('param1,param2', [xyz])
def test_subclass2_func3(param1, param2):
sc1 = SubClass2(...)
assert ...
Итак, я хочу использовать фиксированный экземпляр BaseClass, у меня нет очевидной причины использовать фикстуру над подклассами, и я хочу избежать трехкратного копирования-вставки теста для func3.
Мой лучший способ - использовать еще одну параметризацию:
@pytest.mark.parametrize('classtype', [
(BaseClass,),
(SubClass1,),
(SubClass2,),
])
@pytest.mark.parametrize('param1,param2', [xyz])
def test_func3(classtype, param1, param2):
class_inst = classtype()
assert ...
но поскольку для этого требуется дополнительный экземпляр BaseClass, я думаю, что есть лучшее решение. Какой трюк мне не хватает?