doctest是python的一個測試用標準庫。html
顧名思義,這個模塊會尋找程序裏面看起來像交互式Python會話的文本片斷,而後運行這個會話,來判斷實際運行結果和你但願的結果是否一致。python
這個模塊能夠用來進行迴歸測試,或者在編寫教程性的文檔時使用bash
咱們先建立一個example.py,代碼以下函數
1 ''' 2 docstrings能夠放的位置1 3 4 >>> sum(1, 3) 5 4 6 7 ''' 8 9 10 def sum(a, b): 11 ''' 12 docstrings能夠放的位置2 13 >>> sum(3, 5) 14 8 15 16 >>> sum('a', 'c') 17 'ac' 18 ''' 19 return a + b 20 21 if __name__ == "__main__": 22 import doctest 23 doctest.testmod()
而後咱們在控制檯執行命令python example.py -v,則會輸出測試的結果以下測試
$ python example.py -v Trying: sum(1, 3) Expecting: 4 ok Trying: sum(3, 5) Expecting: 8 ok Trying: sum('a', 'c') Expecting: 'ac' ok 2 items passed all tests: 1 tests in __main__ 2 tests in __main__.sum 3 tests in 2 items. 3 passed and 0 failed. Test passed.
注意,在樣例所有經過,沒有failed的狀況下,「python example.py」是不會輸出任何東西的,須要加參數-v打印全部的測試樣例。咱們能夠把examp.py的第5行換成錯誤的結果99,在執行「python example.py」,那麼會顯示沒有經過的樣例,以下。spa
$ python example.py ********************************************************************** File "example.py", line 4, in __main__ Failed example: sum(1, 3) Expected: 99 Got: 4 ********************************************************************** 1 items had failures: 1 of 1 in __main__ ***Test Failed*** 1 failures.
還有一點要注意的是,文檔註釋裏面的code
>>> sum(1, 3)
">>>"後面記得跟一個空格htm
咱們再看一下對象
if __name__ == "__main__": import doctest doctest.testmod()
若是你不想在__main__中執行testmod(),也能夠不寫,執行python -m doctest -v example.py也行。blog
咱們新建一個文本文件example.txt,裏面寫入
>>> from example import sum >>> sum(2, 3) 5
而後在example.py中替換testmod()函數爲testfile()
import doctest doctest.testfile("example.txt")
而後和1同樣,運行python example.py -v
一樣的,若是你不想在example.py中運行testfile(),你也能夠用以下命令
python -m doctest -v example.txt
docstring模塊會搜索全部的函數,類和方法的文檔字符串,導入到模塊中的對象不會去搜索。
大部分狀況下,咱們能夠直接粘貼交互式控制檯的輸出到文檔註釋中。可是有幾點是須要注意的。
<BLANKLINE>替代
Traceback (most recent call last): Traceback (innermost last):
Python官方文檔: https://docs.python.org/3/library/doctest.html
《流暢的Python》
\Python36\Lib\test\test_doctest.py