0

Я использую unittest и нос-параметризацию и хочу применить различные декораторы к тесту, основанному на условии.Применить различные декораторы на основе состояния

У меня есть тест, и я хочу пропустить unittest.skip тест или выполнить его @parameterized.expand(args) на основе аргументов, переданных аргументам.

Я думаю, мне нужно иметь еще один декоратор, который применяет надлежащий декоратор к тесту, но теперь точно как.

псевдо-код может быть что-то вроде этого:

@validate_data(args) 
    def test(args): 
    ... 

где @validate_data(args) является декоратор, который применяется, если unittest.skip арг == None или @parameterized.expand(args) иначе

Любые комментарии/предложения не ценится.

ответ

2

Декоратор также можно назвать функцией. @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 
+0

Поскольку 'parameterized.expand' делает противным' inspect.stack' магии, вы должны будете вернуть функцию, которая будет вызываться из определения класса, а не внутри другой функции. Я обновил ваш ответ, чтобы он работал. –

+0

@DavidWolever, ах! Благодарю. Я не знал, что эта функция сделала :) – ashwinjv