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()
函數的行為,讓它返回虛擬數據。