根据条件应用不同的装饰器

时间:2016-07-22 00:34:53

标签: python python-unittest python-decorators parameterized-unit-test nose-parameterized

我使用unittest和nose-parametarized,并希望根据条件将不同的装饰器应用于测试。

我有一个测试,我想跳过unittest.skip测试或根据传递给args的参数执行它@parameterized.expand(args)

我想我需要另一个装饰器,它会在测试中应用适当的装饰器,但现在确定如何。

伪代码可能是这样的:

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

其中@validate_data(args)是一个装饰器,如果args ==无或unittest.skip则应用@parameterized.expand(args)

感谢任何意见/建议。

1 个答案:

答案 0 :(得分: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