我想參數化使用裝飾器的函數。最後,我能夠在經過大量命中和試驗之後按預期運行。但是我仍然不滿意,就好像它在工作,但似乎並不是正確的做法。使用裝飾器進行數據驅動測試
請幫我改進這段代碼。
這裏是我的代碼:
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