unittest是Python內置的標準類庫。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很類似。html
經過繼承unittest.TestCase來建立一個測試用例。python
具體請參考文檔。數據結構
舉個例:框架
import unittest def fun(x): return x + 1 class MyTest(unittest.TestCase): def test(self): self.assertEqual(fun(3), 4)
執行後成功。函數
可是,若是將指望的結果改爲5,則執行的結果以下圖所示:工具
doctest 模塊會搜索那些看起來像交互式會話的 Python 代碼片斷,而後嘗試執行並驗證結果.即便從沒接觸過 doctest,咱們也能夠從這個名字中窺到一絲端倪。「它看起來就像代碼裏的文檔字符串(docstring)同樣」 若是你這麼想的話,就已經對了一半了。單元測試
舉個例子:測試
def square(x): """Squares x. >>> square(2) 4 >>> square(-2) 4 >>> square(5) 25 """ return x * x if __name__ == '__main__': import doctest doctest.testmod()
當執行該代碼後,會執行文檔內>>> 後面的測試代碼,並與下一行的結果進行比對。執行的結果以下:spa
可是,若是咱們把結果改一下,square(2)的結果改爲5,測試代碼以下:.net
def square(x): """Squares x. >>> square(2) 5 >>> square(-2) 4 >>> square(5) 25 """ return x * x if __name__ == '__main__': import doctest doctest.testmod()
執行的測試結果以下所示:
2.3 py.test
py.test是unittest的替代工具。
儘管它是一個功能豐富、靈活的測試框架,可是它的語法很簡單。建立一個單元測試就像編寫一個模塊同樣。相比unittest,實現相同的測試功能,py.test作的事情更少。
py.test詳細文檔。
首先,安裝py.test
pip install pytest
第二步,編寫測試代碼
def func(x): return x + 1 def test_answer(): assert func(3) == 5
第三步,執行測試代碼。
執行的結果以下圖所示:
Nose是對unittest的擴展,使得python的測試更加簡單。nose自動發現測試代碼並執行,nose提供了大量的插件,好比測試輸出的xUnitcompatible,覆蓋報表等等。
nose的詳細文檔:https://nose.readthedocs.org/en/latest/
注意:nose自己是支持python3的,可是不少它的插件不支持。
最大的特點,是自動最測試環境的管理以及使用多個解析器配置進行測試。
tox的詳細文檔:http://testrun.org/tox/latest/
2.6 Unittest2
是unitest的升級版。對API進行了改善以及更好的診斷語法。
unittest2的詳細文檔:https://pypi.python.org/pypi/unittest2
首先,安裝
pip install unittest2
爲了之後能在unittest與unittest2之間進行切換,最好的代碼編寫方式以下:
import unittest2 as unittest class MyTest(unittest.TestCase): ...
2.7 mockunittest.mock是用來測試python的庫。在python3.3版本之後,這個是一個標準庫。 對老版原本說,使用pip install mock 進行安裝。
mock的精髓在於,你可使用模擬的對象來替代你的系統的一部分,而後驗證後續的執行是否正確。
mock的詳細文檔:http://www.voidspace.org.uk/python/mock/
下一篇咱們重點講講nose的使用方法。