国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python 測(cè)試框架doctest

2019-11-11 07:07:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
摘要: 這里將從(pythontesting.net)陸續(xù)編譯四篇 Python 測(cè)試框架的簡(jiǎn)介,分別為:doctest、unittest、nose 和 pytest。本篇為第一篇:doctest               

doctest 是一個(gè) Python 發(fā)行版自帶的標(biāo)準(zhǔn)模塊。本篇將分別對(duì)使用 doctest 的兩種方式——嵌入到源代碼中和做成獨(dú)立文件做基本介紹。<br />

doctest 的概念模型


在 Python 的官方文檔中,對(duì) doctest 的介紹是這樣的:

doctest 模塊會(huì)搜索那些看起來(lái)像交互式會(huì)話的 Python 代碼片段,然后嘗試執(zhí)行并驗(yàn)證結(jié)果

即使從沒(méi)接觸過(guò) doctest,我們也可以從這個(gè)名字中窺到一絲端倪。“它看起來(lái)就像代碼里的文檔字符串(docstring)一樣” 如果你這么想的話,就已經(jīng)對(duì)了一半了。

doctest 的編寫過(guò)程就仿佛你真的在一個(gè)交互式 shell(比如 idle)中導(dǎo)入了要測(cè)試的模塊,然后開始一條條地測(cè)試模塊里的函數(shù)一樣。實(shí)際上有很多人也是這么做的,他們寫好一個(gè)模塊后,就在 shell 里挨個(gè)測(cè)試函數(shù),最后把 shell 會(huì)話復(fù)制粘貼成 doctest 用例。<br />

舉個(gè)例子


下面使用的例子是一個(gè)只有一個(gè)函數(shù)的模塊,其中簽入了兩個(gè) doctest 的測(cè)試用例。

unnecessary_math.py:

lang:python"""這里也可以寫"""def multiply(a,b): """ >>> multiply(2,3) 6 >>> multiply('baka~',3) 'baka~baka~baka~' """ return a*bif __name__ == '__main__': import doctest doctest.testmod(verbose=True)

注意測(cè)試代碼的位置,前面說(shuō)過(guò) doctest 的測(cè)試用例就像文檔字符串一樣,這句話的內(nèi)涵在于:測(cè)試用例的位置必須放在整個(gè)模塊文件的開頭,或者緊接著對(duì)象聲明語(yǔ)句的下一行。也就是可以被__doc__ 這個(gè)屬性引用到的地方。并非像普通注釋一樣寫在哪里都可以。另:verbose 參數(shù)用于控制是否輸出詳細(xì)信息,默認(rèn)為False,如果不寫,那么運(yùn)行時(shí)不會(huì)輸出任何東西,除非測(cè)試 fail。

示例的運(yùn)行輸出為:

Trying: multiply(2,3)Expecting: 6okTrying: multiply('baka~',3)Expecting: 'baka~baka~baka~'ok1 items had no tests: __main__1 items passed all tests: 2 tests in __main__.multiply2 tests in 2 items.2 passed and 0 failed.Test passed.

上例中啟動(dòng)測(cè)試的方式是在 __main__ 函數(shù)里調(diào)用了 doctest.testmod() 函數(shù)。這對(duì)于純?nèi)萜餍湍K文件來(lái)說(shuō)是一個(gè)好辦法——正常使用時(shí)只做導(dǎo)入用,直接運(yùn)行文件則進(jìn)行測(cè)試。而對(duì)于__main__ 函數(shù)另有他用的情況,則還可以通過(guò)命令行來(lái)啟動(dòng)測(cè)試:

$ python -m doctest unnecessary_math.py$ python -m doctest -v unnecessary_math.py

這里 -m 表示引用一個(gè)模塊,-v 等價(jià)于 verbose=True。運(yùn)行輸出與上面基本一樣。<br />

獨(dú)立文件模式


如果不想(或不能)把測(cè)試用例寫進(jìn)源代碼里,則還可以使用一個(gè)獨(dú)立的文本文件來(lái)保存測(cè)試用例。

lang:python可選的一些解釋性內(nèi)容...>>> from test import multiply>>> multiply(2,3)6>>> multiply('baka~',3)'baka~baka~baka~'

幾乎同樣的格式。運(yùn)行方法可以分為在 Python shell 里運(yùn)行或者在系統(tǒng) shell 里運(yùn)行:

lang:python>>> import doctest>>> doctest.testfile('example.txt')

bash/cmd.exe:

$ python -m doctest -v example.txt
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 赤水市| 兴山县| 仲巴县| 荣成市| 崇礼县| 大渡口区| 汤阴县| 耒阳市| 朔州市| 东方市| 工布江达县| 松阳县| 阳信县| 都安| 娱乐| 平泉县| 郧西县| 杭锦后旗| 依兰县| 海盐县| 平乡县| 阿坝县| 乐业县| 阿拉善左旗| 那坡县| 丰都县| 南涧| 白山市| 固始县| 澄江县| 屏东县| 孟村| 武冈市| 营口市| 育儿| 永安市| 永昌县| 呼玛县| 新化县| 兴和县| 新干县|