python測試標準庫doctest

引言:

doctest是python的一個測試用標準庫。html

顧名思義,這個模塊會尋找程序裏面看起來像交互式Python會話的文本片斷,而後運行這個會話,來判斷實際運行結果和你但願的結果是否一致。python

這個模塊能夠用來進行迴歸測試,或者在編寫教程性的文檔時使用bash

 

基本使用:

1.經過Docstrings測試

咱們先建立一個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

 

2.經過Test File測試

咱們新建一個文本文件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

 

3.如何寫docstring

docstring模塊會搜索全部的函數,類和方法的文檔字符串,導入到模塊中的對象不會去搜索。

大部分狀況下,咱們能夠直接粘貼交互式控制檯的輸出到文檔註釋中。可是有幾點是須要注意的。

  • 預期輸出不能包含全空白行。由於這會當成輸出的結束。若是必定要有空白行,用<BLANKLINE>替代
  • Tab字符會被替換成8個空格
  • 捕獲輸出到stdout的內容,stderr不會被捕獲
  • 關於異常,輸出必須以Traceback開頭。好比
    Traceback (most recent call last):
    Traceback (innermost last):

     

 

參考資料:

Python官方文檔: https://docs.python.org/3/library/doctest.html

《流暢的Python》

\Python36\Lib\test\test_doctest.py

相關文章
相關標籤/搜索