單元測試框架 - 框架



“unittest” 支援測試自動化、測試的設定和關閉程式碼共享、將測試聚合到集合中以及測試與報告框架的獨立性。

unittest 模組提供了一些類,可以輕鬆地為一組測試支援這些特性。

為了實現這一點,unittest 支援以下重要概念:

  • 測試裝置 (test fixture) - 這表示執行一個或多個測試所需的準備工作以及任何相關的清理操作。這可能包括,例如,建立臨時或代理資料庫、目錄或啟動伺服器程序。

  • 測試用例 (test case) - 這是測試的最小單位。它檢查對特定輸入集的特定響應。unittest 提供了一個基類 TestCase,可用於建立新的測試用例。

  • 測試套件 (test suite) - 這是測試用例、測試套件或兩者的集合。它用於聚合應一起執行的測試。測試套件由 TestSuite 類實現。

  • 測試執行器 (test runner) - 這是協調測試執行並將結果提供給使用者的元件。執行器可以使用圖形介面、文字介面或返回特殊值以指示測試執行的結果。

建立單元測試

編寫簡單的單元測試涉及以下步驟:

步驟 1 - 在程式中匯入 unittest 模組。

步驟 2 - 定義要測試的函式。在下面的示例中,add() 函式將被測試。

步驟 3 - 透過子類化 unittest.TestCase 建立測試用例。

步驟 4 - 將測試定義為類中的方法。方法名稱必須以“test”開頭。

步驟 5 - 每個測試都呼叫 TestCase 類的 assert 函式。有許多型別的斷言。下面的示例呼叫 assertEquals() 函式。

步驟 6 - assertEquals() 函式將 add() 函式的結果與 arg2 引數進行比較,如果比較失敗則丟擲 AssertionError 異常。

步驟 7 - 最後,呼叫 unittest 模組的 main() 方法。

import unittest
def add(x,y):
   return x + y
   
class SimpleTest(unittest.TestCase):
   def testadd1(self):
      self.assertEquals(add(4,5),9)
      
if __name__ == '__main__':
   unittest.main()

步驟 8 - 從命令列執行上述指令碼。

C:\Python27>python SimpleTest.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK

步驟 9 - 測試可能有以下三種可能的結果:

序號 資訊 & 描述
1

OK

測試透過。“A”顯示在控制檯上。

2

FAIL

測試未透過,並引發 AssertionError 異常。“F”顯示在控制檯上。

3

ERROR

測試引發了除 AssertionError 之外的異常。“E”顯示在控制檯上。

這些結果分別由“.”、“F”和“E”顯示在控制檯上。

命令列介面

unittest 模組可以從命令列使用來執行單個或多個測試。

python -m unittest test1
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method

unittest 支援以下命令列選項。有關所有命令列選項的列表,請使用以下命令:

Python –m unittest -h

序號 選項 & 描述
1

-h, --help

顯示此訊息

2

v, --verbose

詳細輸出

3

-q, --quiet

最小輸出

4

-f, --failfast

在第一次失敗時停止

5

-c, --catch

捕獲 Control-C 並顯示結果

6

-b, --buffer

在測試執行期間緩衝標準輸出和標準錯誤

廣告