0

J'utilise unittest et nose-parametarized, et je veux appliquer différents décorateurs à un test basé sur une condition.Appliquer différents décorateurs en fonction d'une condition

J'ai un test et je veux passer le test unittest.skip ou l'exécuter @parameterized.expand(args) en fonction des arguments passés à args.

Je pense que je dois avoir un autre décorateur qui applique le bon décorateur à l'essai, mais maintenant, comment faire.

Code

pseudo pourrait être quelque chose comme ceci:

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

@validate_data(args) est un décorateur qui applique unittest.skip si args == Aucun ou @parameterized.expand(args) autrement

Les commentaires/suggestions sont appréciés.

Répondre

2

Un décorateur peut également être appelé en tant que fonction. @decorator est équivalent à decorator(func) et @decorator(args) à decorator(args)(func). Vous pouvez donc renvoyer la valeur de ces retours de fonction dans votre décorateur. Voici un exemple ci-dessous:

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

Parce que '' parameterized.expand' ne méchant inspect.stack' magique, vous aurez besoin de retourner une fonction qui sera appelée à partir de la définition de classe et pas dans une autre fonction. J'ai mis à jour votre réponse afin que cela fonctionne. –

+0

@DavidWolever, ah! Merci. Je ne savais pas ce que cette fonction a fait :) – ashwinjv