在调用前应用装饰器而不是在定义前面

时间:2015-02-18 10:51:40

标签: python unit-testing python-decorators

我目前正试图使用​​装饰器来实现在我的单元测试中等待一些断言调用的功能,然后才让AssertionError冒出来。

目前我的装饰师看起来像这样:

def waitUpTo(seconds):
    def decorator(assert_func_to_decorate):
        def wrapper(*args, **kwargs):
            for _ in range(seconds):
                print(datetime.now())
                try:
                    return(assert_func_to_decorate(*args,**kwargs))
                except AssertionError:
                    time.sleep(1)
            return(assert_func_to_decorate(*args,**kwargs))
        return wrapper
    return decorator

当我打电话并使用它时,它的效果非常好:

waitUpTo(3)(self.assertRegexpMatches)('notHello', r'Hello')

但不知怎的,这些电话往往会有点长。 有没有办法在实际调用函数之前而不是在函数定义之前使用@语法?

理想情况下这样的事情会很好:

@waitUpTo(3)
self.assertRegexpMatches('notHello', r'Hello')

0 个答案:

没有答案