首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 單元測試入門:unittest 框架完整實作與最佳實踐

     編輯:更多程式設計知識

單元測試是測試驅動開發 (TDD) 核心,Python 內建 unittest 提供豐富斷言、自動發現、fixture 機制。本文以自訂 Dict 類別為例,示範測試類別撰寫、執行方式、setUp/tearDown 生命週期與覆蓋率建議。

被測類別:可用屬性存取的 Dict

class Dict(dict):
    def __init__(self, **kw): super(Dict, self).__init__(**kw)
    def __getattr__(self, key):
        try: return self[key]
        except KeyError: raise AttributeError("'Dict' object has no attribute '%s'" % key)
    def __setattr__(self, key, value): self[key] = value

測試類別:mydict_test.py

import unittest
from mydict import Dict

class TestDict(unittest.TestCase):
    def setUp(self): print('setUp...')
    def tearDown(self): print('tearDown...')

    def test_init(self):
        d = Dict(a=1, b='test')
        self.assertEqual(d.a, 1)
        self.assertEqual(d.b, 'test')
        self.assertTrue(isinstance(d, dict))

    def test_key(self):
        d = Dict()
        d['key'] = 'value'
        self.assertEqual(d.key, 'value')

    def test_attr(self):
        d = Dict()
        d.key = 'value'
        self.assertTrue('key' in d)
        self.assertEqual(d['key'], 'value')

    def test_keyerror(self):
        d = Dict()
        with self.assertRaises(KeyError):
            _ = d['empty']

    def test_attrerror(self):
        d = Dict()
        with self.assertRaises(AttributeError):
            _ = d.empty

執行方式

# 方式一:直接執行腳本 (檔案末尾加入 unittest.main())
$ python mydict_test.py

# 方式二:模組模式 (推薦,支援批量發現)
$ python -m unittest mydict_test
.....
----------------------------------------------------------------------
Ran 5 tests in 0.001s
OK

核心斷言方法速查

setUp / tearDown 機制

  • 每個 test_* 方法執行前後自動呼叫一次。
  • 適用:資料庫連線建立/關閉、暫存檔案建立/清理、Mock 物件配置/重置。

測試案例設計原則

  1. 覆蓋正常輸入、邊界值、異常輸入三大類。
  2. 單一測試方法只驗證一個行為,失敗訊息易定位。
  3. 測試碼保持簡單,避免測試本身引入 Bug。
  4. 測試通過 ≠ 無 Bug,但測試失敗 ≡ 有 Bug。

進階工具推薦

  • pytest:更簡潔語法、豐富插件、參數化測試、自動重跑失敗。
  • coverage.py:測試覆蓋率報告 coverage run -m pytest && coverage html。
  • tox:多 Python 版本矩陣測試。

建立單元測試習慣,重構時才有底氣,CI/CD 才敢自動部署。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法用途
assertEqual(a, b)a == b
assertNotEqual(a, b)a != b
assertTrue(x) / assertFalse(x)布林判斷
assertIs(a, b) / assertIsNot(a, b)同一物件身分
assertIsNone(x) / assertIsNotNone(x)None 判斷
assertIn(a, b) / assertNotIn(a, b)成員關係
assertRaises(Error, callable, *args)預期拋出異常
assertAlmostEqual(a, b, places=7)浮點數近似相等