簡體   English   中英

使用參數化模塊鏈接裝飾器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM