python之doctest的用法


doctest是python自帶的一個模塊,你可以把它叫做“文檔測試”(doctest)模塊。

doctest的使用有兩種方式:一個是嵌入到python源中。另一個是放到一個獨立文件。

doctest的概念模型:

Module doctest - 一個在docstrings中運行示例的框架。
 
在最簡單的使用中,結束每個要測試的模塊M:
 
def _test():
    導入doctest
    doctest.testmod()
 
如果__name__ ==“__main__”:
    _測試()
 
然后將該模塊作為腳本運行將導致在
docstrings得到執行和驗證:
 
python M.py
 
這將不會顯示任何東西,除非一個例子失敗,在這種情況下
失敗的例子和失敗的原因被打印到標准輸出
(為什么不stderr?因為stderr是一個蹩腳的黑客<0.2.wink>),以及最后的
輸出行是“測試失敗”。
 
改為使用-v開關運行它:
 
python M.py -v
 
並將所有嘗試的示例的詳細報告一起打印到stdout
並在最后提供各種摘要。
 
您可以通過將“verbose = True”傳遞給testmod來強制詳細模式,或禁止
它通過傳遞“verbose = False”。在任何一種情況下,sys.argv都不是
由testmod檢查。
 
有多種其他方式可以運行doctests,包括集成
使用unittest框架,並支持運行非Python文本
包含doctests的文件。還有很多方法可以覆蓋零件
doctest的默認行為

doctest潛入源碼中:

例子:

用doctext測試一個Dict類:

#mydit.py

class Dict(dict):

  ,,,

  simple dict but also support access as x.y style.

 

  >>> d1 = Dict()

  >>> d1['x'] = 100

  >>> d1.x

  100

  >>> d1.y=200

  >>> d1['y']

  200

  >>> d2 = Dict(a=1,b=2,c='3')

  >>> d2.c

  '3'

  >>> d2['empty']

  Traceback (most recent call last):

    ...

  KeyError:'empty'

  >>> d2.empty

  Traceback(most recent call last):

    ...

  AttributeError: 'Dict' object has no attribute 'empty'

  '''

  def __init__(self,**kw):

    super(Dict,self).__init__(**kw)

  def _getattr_(self,key):

    try:

      return self[key]

    except KeyError:

      raise AttributeError(r"'Dict' object has no attribute '%s'"%key)

  def _setattr_(self,key,value):

    self[key] = value

if __name__=='_main_':

  import doctest

  docest.testmod()

doctest嚴格按照python交互式命令行的輸入和輸出來判斷測試結果是否正確。只有測試異常的時候,可以用...表示中間的一大段煩人的輸出。

運行python mydict.py:

$ python mydict.py

什么輸出也沒有。這說明我們編寫的doctest運行都是正確的。

獨立文件模式

如果不想或不能把測試用例寫進源代碼里,則還可以使用一個獨立的文本文件來保存測試用例。

將doctest從測試用例:

 

def multiply(a, b): """ >>> multiply(4, 3) 12 >>> multiply('a', 3) 'aaa' """ return a * b if __name__=='__main__': import doctest doctest.testmod(verbose=True)
放到test_unnecessary_math.txt文件里。
1 這個例子展示如何將doctest用例放到一個獨立的文件中。
2 '>>>'開頭的行就是doctest測試用例。
3 不帶'>>>'的行就是測試用例的輸出。
4 如果實際運行的結果與期望的不一致,就標記為測試失敗。

>>> from unnecessary_math import mutiply
>>> mutiply(3,4)
12
>>>mutiply('a',3)
'aaa'
注意: from 那一行也要以>>>開頭
在系統的shell中執行:
python -m doctest -v test_unncessary_math.txt

 

  

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM