仿照addCleanup 在unittest中清理addSetupclass資源

addCleanup的用例這裏不介紹了,能夠看個人另外一編文章: python unittest框架中addCleanup函數詳解html

但若是有下面這種場景,仍是會遺留大批理資源python

在setUpClass注入各類先導資源,好比:app

一、注入a框架

二、注入b函數

三、注入cspa

而後在teardownclass中清理code

一、清理chtm

二、清理bblog

三、清理a資源

假設在注入b時出錯了,那麼在teardownclass中第一步就會出錯

 

解決方法:

咱們仿照addCleanup寫一個這樣的函數,以下

一、先在setupclass中定義一個列表

二、寫SetupCleanup這樣一個函數及doSetupCleanup函數,將列表倒序

三、將doSetupCleanup加入在tearDownClass中

代碼以下:

    @classmethod
    def setUpClass(cls):
         ....
         cls.setup_cleanup_list = []
         ....
    @classmethod
    def SetupCleanup(cls, func, *args, **kwargs):
        cls.setup_cleanup_list.append((func, args, kwargs))

    @classmethod
    def doSetupcleanup(cls):
        try:
            for item in reversed(cls.setup_cleanup_list):
                function, args, kwargs = item
                for _ in range(3):
                    try:
                        function(*args, **kwargs)
                        break
                    except Exception as e:
                        log.exception(e)
        finally:
            cls.setup_cleanup_list = []
    @classmethod
    def tearDownClass(cls):
        cls.doSetupcleanup()
相關文章
相關標籤/搜索