Python 的單元測試之 unittest

發表於2017-03-17

testtools


Overview

Basic example

隨著專案的不斷擴大,單元測試在保證開發效率、可維護性和軟體質量等方面的地位越發舉足輕重,是一本萬利的舉措。Python 常用 unittest module 編寫單元測試,它包含四個概念:

  • test fixture:初始化和清理測試環境,比如建立臨時的資料庫,檔案和目錄等,其中 setUp()setDown() 是最常用的方法
  • test case:單元測試用例,TestCase 是編寫單元測試用例最常用的類
  • test suite:單元測試用例的集合,TestSuite 是最常用的類
  • test runner:執行單元測試

例如:

執行結果如下:

Add fixture

setUp()setDown() 允許執行每個測試用例前分別初始化和清理測試環境,用法如下:

Ignore some testcases

有時希望某些用例不被執行,unittest.skip() 提供了忽略某個測試用例的功能,用法如下:

執行結果如下:


Run your tests

Command Line Interface

unittest 提供了豐富的命令列入口,可以根據需要執行某些特定的用例。有了命令列的支援,上述例子的最後兩行程式碼就顯得冗餘,應當被移除:

執行 testdemo.py 檔案所有的測試用例:

執行 testdemo.py 檔案的 TestStringMethods 類的所有測試用例:

執行 testdemo.py 檔案 TestStringMethods 類的 test_upper:

Test Discovery

unittest 提供了自動匹配發現並執行測試用例的功能,隨著專案程式碼結構越發龐大,勢必有多個測試檔案,自動匹配發現並測試用例的功能在此就顯得非常有用,只要滿足 load_tests protocol 的測試用例都會被 unittest 發現並執行,測試用例檔案的預設匹配規則為 test*.py。通過一條命令即可執行所有的測試用例,如此就很容易被 tox 等測試工具所整合。使用如下:

引數如下:

假設現在要被測試的程式碼目錄如下:


A Collection of Assertion


Testtools

testtools is a set of extensions to the Python standard library’s unit testing framework.

testtools 是一個功能類似 unittest 的庫,它集合眾家標準測試庫之所長,和 unittest 相比,功能更為強大,使用更為簡單,OpenStack 廣泛的利用它編寫單元測試。由於在用法上 testtools 和 unittest 類似,所以本節簡要介紹 testtols 的特點:

  • Better assertion methods: 支援 assertIn, assertIs, assertIsInstance 等 assertion
  • More debugging info: 更為詳細的 debug 資訊
  • Extend unittest, but stay compatible and re-usable: 相容 unittest
  • Cross-Python compatibility: 支援多種 Python 版本 2.7, 3.3, 3.4, 3.5

更為詳細的說明和用法請見 testtools: tasteful testing for Python

相關文章