原文鏈接:https://www.cnblogs.com/UncleYong/p/7076872.html
【問題】:
在unittest單元測試框架中,執行繼承了unittest.TestCase的類下每個test開頭的方法(就是用例)時,都會執行setUp和tearDown(代碼如下),很麻煩。
能否讓setup和teardown只執行一次?
import unittest
class TestSetupTeardown(unittest.TestCase):
def setUp(self):
print('連接數據庫成功...')
def tearDown(self):
print('關閉數據庫。')
def test_a(self):
print('test_a')
def test_b(self):
print('test_b')
if __name__ == '__main__':
unittest.main()
以上代碼執行效果如下:
setUp連接數據庫,tearDown關閉數據庫,這樣反覆執行,無疑是會增加數據庫服務器資源的損耗,且浪費時間
【解決方案】:
將setup() 和teardown() 換成setUpClass()和tearDownClass()
【注意事項】:
setUpClass():必須使用@classmethod 裝飾器, 所有case運行之前只運行一次
tearDownClass():必須使用@classmethod裝飾器, 所有case運行完之後只運行一次
代碼與執行效果如下:
import unittest
class TestSetupTeardown(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('連接數據庫成功...')
@classmethod
def tearDownClass(cls):
print('關閉數據庫。')
def test_a(self):
print('test_a')
def test_b(self):
print('test_b')
if __name__ == '__main__':
unittest.main()