前言
單元測試是驗證代碼正確性的“質檢工具”。
Python自帶的unittest模塊,其中assertEqual、assertTrue、assertFalse這三個基礎斷言方法,是入門單元測試的“敲門磚”。今天就給大家分享一下它們的用法。
一、unittest與斷言,是代碼的“質檢組合”
首先要明確:unittest是Python內置的單元測試框架,能幫我們自動化驗證代碼邏輯是否正確;而“斷言方法”就是這個框架裏的“判斷標準”——就像質檢員檢查產品時,會用“尺寸是否達標”“材質是否合格”作為標準,斷言方法則用“值是否相等”“條件是否為真”來判斷代碼輸出是否符合預期。
簡單説,當你寫了一個函數(比如計算兩數之和),用斷言方法就能自動檢查“輸入3+2,輸出是不是5”,不用手動運行代碼、盯着結果看。如果斷言通過,説明代碼邏輯沒問題;如果不通過,會明確提示“哪裏錯了”,幫你快速定位bug。
二、assertEqual(a, b)——檢查“兩個東西是不是一模一樣”
assertEqual的作用很直接:判斷a和b是否相等(即a == b),如果相等,測試通過;如果不相等,測試失敗並提示差異。它就像檢查“兩個蘋果是不是一樣重”“兩張身份證號是不是完全相同”,是最常用的斷言方法之一。
代碼示例
import unittest
class TestExample(unittest.TestCase):
def test_equal(self):
self.assertEqual(3 + 2, 5) # 通過:3+2的結果確實是5
self.assertEqual("hello", "hello") # 通過:兩個字符串完全相同
self.assertEqual([1, 2], [1, 2]) # 通過:兩個列表的元素和順序都一致
解讀
- 第一個斷言:驗證“3加2的結果”和“5”是否相等,這是最基礎的數值判斷,比如你寫了個加法函數,就能用它測結果對不對;
- 第二個斷言:驗證兩個“hello”字符串是否一樣,適合測試字符串處理邏輯(比如“截取字符串後是不是預期結果”);
- 第三個斷言:驗證兩個列表是否相等,適合測試列表相關操作(比如“排序後的列表是不是預期順序”)。
如果把代碼裏的5改成6,運行測試時就會報錯,提示“3+2 != 6”,幫你立刻發現“計算邏輯錯了”。
三、assertTrue(x)——檢查“這個條件是不是真的”
assertTrue的作用是判斷x是否為“真”(即x的布爾值是True),如果是,測試通過;如果不是,測試失敗。比如檢查“今天是不是晴天”“這個學生的分數是不是及格了”,適合驗證“某個條件是否成立”。
代碼示例
import unittest
class TestExample(unittest.TestCase):
def test_boolean(self):
self.assertTrue(1 == 1) # 通過:1等於1,條件成立
self.assertTrue("hello" in "hello world") # 通過:"hello"確實在"hello world"裏
self.assertTrue(100 > 50) # 通過:100大於50,條件成立
解讀
- 第一個斷言:驗證“1等於1”這個條件是否為真,看似簡單,實則適合測試“變量是否等於預期值”(比
assertEqual更側重“條件判斷”); - 第二個斷言:驗證“hello”是否包含在“hello world”裏,適合測試字符串包含、列表元素存在等場景(比如“用户輸入的關鍵詞是不是在結果裏”);
- 第三個斷言:驗證“100大於50”是否為真,適合測試大小比較、範圍判斷(比如“計算出的數值是不是超過閾值”)。
比如你寫了個“判斷用户年齡是否成年”的函數,輸入20,就能用self.assertTrue(age >= 18)來驗證結果是否正確。
四、assertFalse(x)——檢查“這個條件是不是假的”
assertFalse和assertTrue是“相反搭檔”:它判斷x是否為“假”(即x的布爾值是False),如果是,測試通過;如果不是,測試失敗。比如檢查“今天是不是下雨”“這個產品是不是過期了”,適合驗證“某個條件一定不成立”。
代碼示例(可直接複製運行)
import unittest
class TestExample(unittest.TestCase):
def test_false(self):
self.assertFalse(1 == 2) # 通過:1等於2是假的,條件不成立
self.assertFalse("python" in "hello world") # 通過:"python"不在"hello world"裏
self.assertFalse(10 < 5) # 通過:10小於5是假的,條件不成立
解讀
- 第一個斷言:驗證“1等於2”是假的,適合測試“兩個值一定不相等”的場景(比如“錯誤輸入是不是不會得到正確結果”);
- 第二個斷言:驗證“python”不在“hello world”裏,適合測試“某個元素一定不存在”(比如“過濾後的列表是不是沒有無效值”);
- 第三個斷言:驗證“10小於5”是假的,適合測試“某個比較一定不成立”(比如“計算出的數值是不是不會低於最小值”)。
比如你寫了個“過濾敏感詞”的函數,輸入“badword”,就能用self.assertFalse("badword" in filtered_text)驗證“敏感詞是不是被成功過濾了”。
五、用對斷言,讓測試更“靠譜”
這三個斷言方法雖然簡單,但用的時候有個小原則:“選最貼合場景的”:
- 如果要判斷“兩個值是否相等”,優先用
assertEqual(比assertTrue(a == b)更清晰,失敗時提示更具體); - 如果要判斷“某個條件是否成立”,用
assertTrue或assertFalse(不用繞彎子寫assertEqual(條件, True)); - 運行測試時,記得在代碼最後加一句
if __name__ == '__main__': unittest.main(),這樣直接運行腳本就能執行所有測試用例。
六、基礎斷言,是單元測試的“第一步”
assertEqual、assertTrue、assertFalse這三個方法,是Python單元測試的“基礎工具”,能夠幫你自動化驗證代碼邏輯,避免“手動測試漏看bug”“改了代碼後舊問題復發”。