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