[英]Chaining decorators with parameterized module
我正在為特定問題尋求幫助。 我們正在編寫測試套件,其中一個測試用例包含一個 class,其中包含一個 function。 這個 function 是我們的測試用例。 測試用例由 htmltestrunner 執行。 如果某些測試用例針對不同的參數測試類似的行為,我們會在模塊 parameterezy 的幫助下參數化這個測試用例 - 指定:使用 parameterize.expand 這是一個包裝器。 現在,為了進行更有效的日志記錄,我們想在一個稱為擴展日志記錄的單獨模塊中編寫 function。 這應該作為參數化 function 的包裝器。
這意味着:參數化 -> WRAPS -> 高級日志記錄 -> WRAPS -> 測試用例 function
不,我為我的高級日志記錄 function 編寫了以下代碼(僅用於調試和測試):
def decorator_func(func):
print(Fore.RED +"Got into decorator_func")
def wrapped_func(*args, **kwargs):
print(Fore.GREEN + "Got into wrapped_func")
try:
print("Got in")
retval = func(*args, **kwargs)
print("Finished")
except Exception as failure:
print("FAILURE: " + str(failure))
if type(failure) == AssertionError:
print("ASSERTION ERROR")
raise
else:
raise
return retval
return wrapped_func
當我不使用參數化包裝器來參數化我的測試用例時,function 可以工作。 如果我使用參數化包裝器,我會失敗:'NoneType' object 不可調用。
任何人都可以幫助我嗎? 一整天都在找。
編輯:我已經發現,parameterized.expand 返回“NoneType Object”。 有什么方法可以從 parameterized.expand 中獲取裝飾的 function 作為返回?
我通過在我的內部 function 上添加 @wrap(func) 解決了這個問題:
def decorator_func(func):
print(Fore.RED +"Got into decorator_func")
@wrap(func)
def wrapped_func(*args, **kwargs):
print(Fore.GREEN + "Got into wrapped_func")
try:
print("Got in")
retval = func(*args, **kwargs)
print("Finished")
except Exception as failure:
print("FAILURE: " + str(failure))
if type(failure) == AssertionError:
print("ASSERTION ERROR")
raise
else:
raise
return retval
return wrapped_func
我不知道它為什么起作用,但確實如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.