簡體   English   中英

單元測試python中的拆解方法

[英]teardown method in unittest python

我是python的新手。 我閱讀了unittest文檔。 在有關tearDown()方法的文檔中,我發現了以下幾行

“即使測試方法引發異常,也會調用此方法,因此子類中的實現可能在檢查內部狀態時需要格外小心。”

這句話表達了什么? 您能否借助一些很好的例子讓我理解我,內部示例可能會造成嚴重破壞?

提前致謝。

編輯:

我得到了一些答案,但是它們很簡單。 我需要一些涉及某些狀態的示例,例如涉及數據庫的測試等等。

這意味着無論測試方法是通過還是失敗(引發異常),都將執行tearDown()方法。

例如:

def tearDown():
    print 'In teardown: cleaning up'

def test_Example1():
    try:
        result = 2 / 0
    except ZeroDivisionError as e:
        raise e

def test_Example2():
    try:
       result = 2 / 2
    except ZeroDivisionError as e:
        raise e   

test_Example1運行時,它將引發ZeroDivisionError ,隨后執行tearDown() ,打印In teardown: cleaning up控制台。 test_Example2 不會引發ZeroDivisionError異常,但是ZeroDivisionError仍將執行tearDown()

編輯我並不完全熟悉Python的數據庫模塊,但這應該足以使工作順利進行……

def tearDown():
    print 'In teardown: cleaning up'

def test_do_database_task():
    db = sqlite3.connect(DB_NAME)        
    try:
        # code related to task at hand
    except:
        raise Exception("Error in connection!")
    finally:
        closeDb(db)

從OP:

“即使測試方法引發異常,也會調用此方法,因此子類中的實現可能在檢查內部狀態時需要格外小心。”

傳達的第一件事是,您可以確定在測試方法中發生的任何事情都稱為teardown 因此,這意味着,你應該在你的測試方法,任何拆卸代碼,你應該把它移動到teardown方法。

但是,如果您的測試方法中確實存在異常,則可能意味着測試實例的狀態在不同的測試運行中可能會有所不同,並且teardown方法必須將其考慮在內,或者您必須對代碼進行結構化以使其能夠一直在工作。

例如,您測試代碼涉及在數據庫中創建表。 如果有異常,則可能不是所有表都已創建,因此teardown應確保不會嘗試刪除不存在的表。 但是,更好的方法可能是setup程序啟動一個事務,然后進行teardown以回滾該事務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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