0

私はunittestとnose-parametarizedを使用しており、条件に基づいて異なるデコレータをテストに適用したいと考えています。条件に基づいて異なるデコレータを適用する

私はテストを持っており、unittest.skipのテストをスキップするか、argsに渡された引数に基づいて@parameterized.expand(args)を実行します。

私はテストに適切なデコレータを適用する別のデコレータを持っている必要があると思いますが、今はどうしたらよいのでしょうか。 @validate_data(args)が引数場合== Noneまたは@parameterized.expand(args)そう

任意のコメント/提案が高く評価されていないunittest.skipを適用するデコレータである

@validate_data(args) 
    def test(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

関連する問題