在Python中,單元測試是一種用來檢查代碼各個功能是否按照預期運行的方法。Python提供了一個內建的模塊 unittest
來實現單元測試,它讓我們可以對代碼進行測試、組織測試、並生成測試報告。
unittest
模塊介紹unittest
是Python標準庫中的一部分,可以用來對代碼進行測試。它支持:
要使用 unittest
,需要繼承 unittest.TestCase
並編寫測試方法。通常,測試方法以 test_
開頭。
以下是一個使用 unittest
進行簡單單元測試的範例:
import unittest
def add(x, y):
return x + y
def subtract(x, y):
return x - y
class TestMathOperations(unittest.TestCase):
def test_add(self):
self.assertEqual(add(3, 5), 8) # 測試 3 + 5 是否等於 8
self.assertEqual(add(-1, 1), 0) # 測試 -1 + 1 是否等於 0
def test_subtract(self):
self.assertEqual(subtract(10, 5), 5) # 測試 10 - 5 是否等於 5
self.assertEqual(subtract(-1, 1), -2) # 測試 -1 - 1 是否等於 -2
if __name__ == "__main__":
unittest.main()
當運行這個腳本時,unittest
會自動執行所有以 test_
開頭的函數,並檢查它們是否通過測試。輸出結果如下:
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
這表明有兩個測試通過了。每個 .
代表一個通過的測試。
unittest.TestCase
提供了一些斷言方法來幫助你檢查代碼是否按照預期運行。常用的斷言方法包括:
assertEqual(a, b)
:檢查 a 和 b 是否相等assertNotEqual(a, b)
:檢查 a 和 b 是否不相等assertTrue(x)
:檢查 x 是否為真assertFalse(x)
:檢查 x 是否為假assertIs(a, b)
:檢查 a 和 b 是否是同一對象assertIsNone(x)
:檢查 x 是否為 NoneassertIn(a, b)
:檢查 a 是否在 b 中assertRaises(exception, callable, *args, **kwds)
:檢查是否拋出指定異常assertEqual()
檢查結果def multiply(x, y):
return x * y
class TestMultiply(unittest.TestCase):
def test_multiply(self):
self.assertEqual(multiply(3, 4), 12)
self.assertEqual(multiply(0, 10), 0)
assertRaises()
測試異常assertRaises()
用來測試某個方法是否會拋出指定的異常。如下例所示,我們期望 divide()
方法當除以零時拋出 ZeroDivisionError
:
def divide(x, y):
if y == 0:
raise ValueError("不能除以零")
return x / y
class TestDivide(unittest.TestCase):
def test_divide_by_zero(self):
with self.assertRaises(ValueError):
divide(10, 0)