Применять разные декораторы в зависимости от условия
Я использую unittest и параметризованный нос, и хочу применить различные декораторы к тесту на основе условия.
У меня есть тест, и я хочу пропустить unittest.skip
тест или выполнить его @parameterized.expand(args)
на основе аргументов, переданных в аргументы.
Я думаю, что мне нужен другой декоратор, который применяет надлежащий декоратор к тесту, но теперь уверен, как.
псевдокод может быть примерно таким:
@validate_data(args)
def test(args):
...
где @validate_data(args)
это декоратор, который применяется unittest.skip
если аргументы == Нет или @parameterized.expand(args)
иначе
Любые комментарии / предложения приветствуются.
1 ответ
Декоратор также может быть вызван как функция. @decorator
эквивалентно decorator(func)
а также @decorator(args)
в decorator(args)(func)
, Таким образом, вы можете вернуть значение этих функций условно в вашем декораторе. Вот пример ниже:
def parameterized_or_skip(args=None):
if args:
return parameterized.expand(args)
return unittest.skip(reason='No args')
...
@parameterized_or_skip(args)
def my_testcase(self, a, b):
pass