iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0

參、setUp()tearDown() 方法

setUp()tearDown() 方法分別在每個測試方法之前和之後執行。它們通常用於設置測試環境或清理資源。

一、使用 setUp()tearDown()

class TestMathOperations(unittest.TestCase):
    
    def setUp(self):
        # 在每個測試方法運行之前執行
        print("這裡進行初始化")
        self.x = 10
        self.y = 5
    
    def tearDown(self):
        # 在每個測試方法運行之後執行
        print("測試結束")
    
    def test_add(self):
        self.assertEqual(self.x + self.y, 15)

    def test_subtract(self):
        self.assertEqual(self.x - self.y, 5)

if __name__ == "__main__":
    unittest.main()

在執行測試時,每個測試方法前會運行 setUp(),而在測試方法後會運行 tearDown(),保證每個測試都是獨立的。

肆、測試套件與測試組

如果你想運行多個測試類或測試用例,可以使用 unittest.TestSuite 將它們組織起來。

一、使用測試套件

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

class TestAdd(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(1, 2), 3)

class TestSubtract(unittest.TestCase):
    def test_subtract(self):
        self.assertEqual(subtract(2, 1), 1)

if __name__ == "__main__":
    suite = unittest.TestSuite()
    suite.addTest(TestAdd("test_add"))
    suite.addTest(TestSubtract("test_subtract"))
    
    runner = unittest.TextTestRunner()
    runner.run(suite)

這樣就可以將多個測試組織在一起運行,並顯示結果。

伍、使用 unittest.mock 進行模擬測試

在一些情況下,我們不希望在單元測試中真正調用某些函數(例如涉及網絡請求、數據庫查詢等)。這時候可以使用 unittest.mock 來替代這些函數。

一、模擬一個函數

from unittest import mock
import unittest

def get_data_from_api():
    return "Real data from API"

class TestMocking(unittest.TestCase):
    
    @mock.patch("__main__.get_data_from_api", return_value="Mock data")
    def test_get_data(self, mock_get):
        result = get_data_from_api()
        self.assertEqual(result, "Mock data")
        mock_get.assert_called_once()  # 確認該函數被調用了一次

if __name__ == "__main__":
    unittest.main()

這裡,我們使用 mock.patch() 來模擬 get_data_from_api() 函數的行為,讓它返回虛擬數據。


上一篇
第29天:單元測試 part1
系列文
python30天入門學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言