unittest是Python內(nèi)置的標(biāo)準(zhǔn)類庫(kù)。它的API跟java的JUnit、.net的NUnit,C++的CppUnit很相似。
通過(guò)繼承unittest.TestCase來(lái)創(chuàng)建一個(gè)測(cè)試用例。
具體請(qǐng)參考 文檔 。
舉個(gè)例:
import unittestdef fun(x): return x + 1class MyTest(unittest.TestCase): def test(self): self.assertEqual(fun(3), 4)執(zhí)行后成功。
但是,如果將期望的結(jié)果改成5,則執(zhí)行的結(jié)果如下圖所示:
2.2 Doctest
doctest 模塊會(huì)搜索那些看起來(lái)像交互式會(huì)話的 Python 代碼片段,然后嘗試執(zhí)行并驗(yàn)證結(jié)果.即使從沒(méi)接觸過(guò) doctest,我們也可以從這個(gè)名字中窺到一絲端倪。“它看起來(lái)就像代碼里的文檔字符串(docstring)一樣” 如果你這么想的話,就已經(jīng)對(duì)了一半了。
舉個(gè)例子:
def square(x): """Squares x. >>> square(2) 4 >>> square(-2) 4 >>> square(5) 25 """ return x * xif __name__ == '__main__': import doctest doctest.testmod()當(dāng)執(zhí)行該代碼后,會(huì)執(zhí)行文檔內(nèi)>>> 后面的測(cè)試代碼,并與下一行的結(jié)果進(jìn)行比對(duì)。執(zhí)行的結(jié)果如下:
![]()
但是,如果我們把結(jié)果改一下,square(2)的結(jié)果改成5,測(cè)試代碼如下:
def square(x): """Squares x. >>> square(2) 5 >>> square(-2) 4 >>> square(5) 25 """ return x * xif __name__ == '__main__': import doctest doctest.testmod()執(zhí)行的測(cè)試結(jié)果如下所示:
2.3 py.test
py.test是unittest的替代工具。
盡管它是一個(gè)功能豐富、靈活的測(cè)試框架,但是它的語(yǔ)法很簡(jiǎn)單。創(chuàng)建一個(gè)單元測(cè)試就像編寫(xiě)一個(gè)模塊一樣。相比unittest,實(shí)現(xiàn)相同的測(cè)試功能,py.test做的事情更少。
py.test詳細(xì) 文檔 。
首先,安裝py.test
pip install pytest第二步,編寫(xiě)測(cè)試代碼
def func(x): return x + 1def test_answer(): assert func(3) == 5第三步,執(zhí)行測(cè)試代碼。
找到pytest安裝路徑。用其所在的解析器(python.exe)執(zhí)行test.py ,執(zhí)行命令比如:
執(zhí)行的結(jié)果如下圖所示:
2.4 Nose
Nose是對(duì)unittest的擴(kuò)展,使得python的測(cè)試更加簡(jiǎn)單。nose自動(dòng)發(fā)現(xiàn)測(cè)試代碼并執(zhí)行,nose提供了大量的插件,比如測(cè)試輸出的xUnitcompatible,覆蓋報(bào)表等等。
nose的詳細(xì)文檔: https://nose.readthedocs.org/en/latest/
注意:nose本身是支持python3的,但是很多它的插件不支持。
2.5 tox
最大的特色,是自動(dòng)最測(cè)試環(huán)境的管理以及使用多個(gè)解析器配置進(jìn)行測(cè)試。
tox的詳細(xì)文檔: http://testrun.org/tox/latest/
2.6 Unittest2
是unitest的升級(jí)版。對(duì)API進(jìn)行了改善以及更好的診斷語(yǔ)法。
unittest2的詳細(xì)文檔: https://pypi.python.org/pypi/unittest2
首先,安裝
pip install unittest2為了以后能在unittest與unittest2之間進(jìn)行切換,最好的代碼編寫(xiě)方式如下:
import unittest2 as unittestclass MyTest(unittest.TestCase): ...2.7 mock unittest.mock是用來(lái)測(cè)試python的庫(kù)。在python3.3版本以后,這個(gè)是一個(gè)標(biāo)準(zhǔn)庫(kù)。對(duì)老版本來(lái)說(shuō),使用pip install mock 進(jìn)行安裝。
mock的精髓在于,你可以使用模擬的對(duì)象來(lái)替代你的系統(tǒng)的一部分,然后驗(yàn)證后續(xù)的執(zhí)行是否正確。mock的詳細(xì)文檔:http://www.voidspace.org.uk/python/mock/下一篇我們重點(diǎn)講講nose的使用方法。
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注