在 Python 的官方文檔中,對 doctest 的介紹是這樣的:python
doctest 模塊會搜索那些看起來像交互式會話的 Python 代碼片斷,而後嘗試執行並驗證結果shell
即便從沒接觸過 doctest,咱們也能夠從這個名字中窺到一絲端倪。「它看起來就像代碼裏的文檔字符串(docstring)同樣」 若是你這麼想的話,就已經對了一半了。bash
下面使用的例子是一個只有一個函數的模塊,其中籤入了兩個 doctest 的測試用例。函數
unnecessary_math.py:測試
lang:python """ 這裏也能夠寫 """ def multiply(a,b): """ >>> multiply(2,3) 6 >>> multiply('baka~',3) 'baka~baka~baka~' """ return a*b if __name__ == '__main__': import doctest doctest.testmod(verbose=True)
注意測試代碼的位置,前面說過 doctest 的測試用例就像文檔字符串同樣,這句話的內涵在於:測試用例的位置必須放在整個模塊文件的開頭,或者緊接着對象聲明語句的下一行。也就是能夠被 __doc__
這個屬性引用到的地方。並不是像普通註釋同樣寫在哪裏均可以。另:verbose
參數用於控制是否輸出詳細信息,默認爲 False
,若是不寫,那麼運行時不會輸出任何東西,除非測試 fail。命令行
示例的運行輸出爲:code
Trying: multiply(2,3) Expecting: 6 ok Trying: multiply('baka~',3) Expecting: 'baka~baka~baka~' ok 1 items had no tests: __main__ 1 items passed all tests: 2 tests in __main__.multiply 2 tests in 2 items. 2 passed and 0 failed. Test passed.
上例中啓動測試的方式是在 __main__
函數裏調用了 doctest.testmod()
函數。這對於純容器型模塊文件來講是一個好辦法——正常使用時只作導入用,直接運行文件則進行測試。而對於 __main__
函數另有他用的狀況,則還能夠經過命令行來啓動測試:對象
$ python -m doctest unnecessary_math.py $ python -m doctest -v unnecessary_math.py
-m
表示引用一個模塊,-v
等價於 verbose=True
。運行輸出與上面基本同樣。 <br /> ##獨立文件模式若是不想(或不能)把測試用例寫進源代碼裏,則還能夠使用一個獨立的文本文件來保存測試用例。ip
lang:python 可選的一些解釋性內容... >>> from test import multiply >>> multiply(2,3) 6 >>> multiply('baka~',3) 'baka~baka~baka~'
幾乎一樣的格式。運行方法能夠分爲在 Python shell 裏運行或者在系統 shell 裏運行:文檔
lang:python >>> import doctest >>> doctest.testfile('example.txt')
bash/cmd.exe:
$ python -m doctest -v example.txt