我想参数化使用装饰器的函数。最后,我能够在经过大量命中和试验之后按预期运行。但是我仍然不满意,就好像它在工作,但似乎并不是正确的做法。使用装饰器进行数据驱动测试
请帮我改进这段代码。
这里是我的代码:
def WarmWelcome(fn):
def wrapped(DataProvider):
for name in DataProvider():
print fn(name) + ":)"
return wrapped
def DataProvider():
names=["abc","xyz","def"]
for name in names:
yield name
@WarmWelcome
def hello(name):
return "hello " +name
hello(DataProvider)
下面是更新后的代码:
def WarmWelcome(DataProvider):
def real_decorator(fn):
def wrapped():
for name in DataProvider():
print fn(name) + ":)"
return wrapped
return real_decorator
def DataProvider():
names=["abc","xyz","def"]
for name in names:
yield name
@WarmWelcome(DataProvider)
def hello(name):
return "hello " +name
hello()
对我来说很好。那究竟是什么问题? – Aya 2013-04-27 13:54:27
根据我的理解,更好的方法是通过装饰器函数传递DataProvider。像这样的东西:@WarmWelcome(DataProvider()),但我不能让它以这种方式运行。 – 2013-04-27 14:07:22
@ vishul9,参见[这个答案](http://stackoverflow.com/a/5929165/521590)关于如何实现一个装饰器的参数。 – gatto 2013-04-27 14:19:31