0

unittest 및 nose-parametarized를 사용 중이며 조건에 따라 다른 데코레이터를 테스트에 적용하려고합니다.조건에 따라 다른 데코레이터 적용

나는 테스트를 가지고 있으며, unittest.skip 테스트를 건너 뛰거나 args에 전달 된 인수를 기반으로 @parameterized.expand(args)을 실행하려고합니다.

필자는 테스트에 적절한 데코레이터를 적용하는 데 필요한 다른 데코레이터가 필요하다고 생각하지만 지금은 확실합니다.

의사 코드는 다음과 같이 될 수있다 : @validate_data(args)이 인수는 == 없음 또는 @parameterized.expand(args) 그렇지 않으면

모든 의견/제안이 인정되지 않는 경우 unittest.skip을 적용 장식입니다

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

.

답변

2

데코레이터를 함수로 호출 할 수도 있습니다. @decoratordecorator(func)@decorator(args) ~ decorator(args)(func)에 해당합니다. 따라서 함수 반환 값을 조건부로 반환 할 수 있습니다. parameterized.expand` 불쾌한하지

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

'때문에'마법 inspect.stack', 당신은 클래스의 정의에서가 아닌 다른 함수 내에서 호출되는 함수를 반환해야합니다 : 여기에 아래의 예입니다. 귀하의 답변을 업데이트 했으므로 제대로 작동합니다. –

+0

@DavidWolever, 아! 감사. 나는 그 기능이 무엇인지 몰랐다. :) – ashwinjv

관련 문제