Фон
В среде Python unittest
довольно распространенной идиомой является использование наследования на базовом наборе тестов для применения всего набора тестов к новой задаче, а иногда и для добавления дополнительных тестов. Тривиальный пример будет:
from unittest import TestCase
class BaseTestCase(TestCase):
VAR = 3
def test_var_positive(self):
self.assertGreaterEqual(self.VAR, 0)
class SubTestCase(BaseTestCase):
VAR = 8
def test_var_even(self):
self.assertTrue(self.VAR % 2 == 0)
Который при запуске запускает 3 теста:
$ python -m unittest -v
test_var_positive (test_unittest.BaseTestCase) ... ok
test_var_even (test_unittest.SubTestCase) ... ok
test_var_positive (test_unittest.SubTestCase) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.000s
Это особенно полезно, если вы тестируете иерархию классов, где каждый подкласс является подтипом родительских классов и, таким образом, должен иметь возможность пройти набор тестов родительского класса в дополнение к своему собственному.
Задача
Я хотел бы перейти на использование pytest
, но у меня есть много тестов, которые структурированы таким образом. Из того, что я могу сказать, pytest
намеревается заменить большую часть функциональности TestCase
классов на приборы, но есть ли идиома pytest, которая позволяет наследовать тест, и если да, то что это ?
Я знаю, что pytest
может использоваться для запуска unittest
-тификаторов, но поддержка ограничена , и я хотел бы использовать некоторые из функций, которые "никогда не будут поддерживаться" pytest
в моих тестах.