我目前正试图使用装饰器来实现在我的单元测试中等待一些断言调用的功能,然后才让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')