動態

詳情 返回 返回

Python單元測試入門:3個核心斷言方法,幫你快速定位代碼bug - 動態 詳情

前言

單元測試是驗證代碼正確性的“質檢工具”。

Python自帶的unittest模塊,其中assertEqualassertTrueassertFalse這三個基礎斷言方法,是入門單元測試的“敲門磚”。今天就給大家分享一下它們的用法。

一、unittest與斷言,是代碼的“質檢組合”

首先要明確:unittest是Python內置的單元測試框架,能幫我們自動化驗證代碼邏輯是否正確;而“斷言方法”就是這個框架裏的“判斷標準”——就像質檢員檢查產品時,會用“尺寸是否達標”“材質是否合格”作為標準,斷言方法則用“值是否相等”“條件是否為真”來判斷代碼輸出是否符合預期。

簡單説,當你寫了一個函數(比如計算兩數之和),用斷言方法就能自動檢查“輸入3+2,輸出是不是5”,不用手動運行代碼、盯着結果看。如果斷言通過,説明代碼邏輯沒問題;如果不通過,會明確提示“哪裏錯了”,幫你快速定位bug。

二、assertEqual(a, b)——檢查“兩個東西是不是一模一樣”

assertEqual的作用很直接:判斷ab是否相等(即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)——檢查“這個條件是不是假的”

assertFalseassertTrue是“相反搭檔”:它判斷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)更清晰,失敗時提示更具體);
  • 如果要判斷“某個條件是否成立”,用assertTrueassertFalse(不用繞彎子寫assertEqual(條件, True));
  • 運行測試時,記得在代碼最後加一句if __name__ == '__main__': unittest.main(),這樣直接運行腳本就能執行所有測試用例。

六、基礎斷言,是單元測試的“第一步”

assertEqualassertTrueassertFalse這三個方法,是Python單元測試的“基礎工具”,能夠幫你自動化驗證代碼邏輯,避免“手動測試漏看bug”“改了代碼後舊問題復發”。

user avatar assassin 頭像 ydswin 頭像 haoqidedalianmao 頭像 waluna 頭像 congrongdehanbaobao 頭像 risejl 頭像 yubaolee 頭像 onlythinking 頭像 joomlachina 頭像 kaika1 頭像 zengjingaiguodelang 頭像 clarance 頭像
點贊 12 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.