0

我使用单元测试和鼻parametarized不同的装饰,并希望不同的装饰适用于基于条件的考验。应用基于条件

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

我想我需要它适用适当的装饰,以测试另一个装饰,但现在知道如何。

伪代码可能是这样的:

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

其中@validate_data(args)是,如果ARGS ==无或@parameterized.expand(args)否则

任何的意见/建议表示赞赏它适用unittest.skip一个装饰。

回答

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