doctest是屬於測試模塊裏的一種,對註釋文檔裏的示例進行檢測。測試
給出一個例子:this
splitter.pydef split(line, types=None, delimiter=None):
"""Splits a line of test and optionally performs type conversion.
For example:
>>> split('GOOD 100 490.50')
['GOOD', '100', '490.50']
>>> split('GOOD 100 490.50', [str, int, float])
['GOOD', 100, 490.50]
>>>
By default, splitting is perfomed on whitespace, but a different delimiter
can be selected with the delimiter keyword argument:
>>> split('GOOD, 100, 490.50', delimiter=',')
['GOOOD', '100', '490.50']
>>>
"""
fields = line.split(delimiter)
if types:
fields = [ty(val) for ty, val in zip(types, fields)]
return fields
能夠有2種方式來使用doctest:spa
testsplitter.py# testsplitter.py
import splitter
import doctest
nfail, ntests = doctest.testmod(splitter, verbose=True)
運行結果:code
Result>>>
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts\splitter.py", line 8, in splitter.split
Failed example:
split('GOOD 100 490.50', [str, int, float])
Expected:
['GOOD', 100, 490.50]
Got:
['GOOD', 100, 490.5]
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts\splitter.py", line 14, in splitter.split
Failed example:
split('GOOD, 100, 490.50', delimiter=',')
Expected:
['GOOOD', '100', '490.50']
Got:
['GOOD', ' 100', ' 490.50']
**********************************************************************
1 items had failures:
2 of 3 in splitter.split
***Test Failed*** 2 failures.
>>>
這樣注意一點,這個比對是嚴格比對,因此490.50和490.5是不一樣的。orm
doctest.testmod還能夠帶一個參數使用,顯示更爲詳細的結果blog
nfail, ntests = doctest.testmod(splitter, verbose=True)
Result2>>>
Trying:
split('GOOD 100 490.50')
Expecting:
['GOOD', '100', '490.50']
ok
Trying:
split('GOOD 100 490.50', [str, int, float])
Expecting:
['GOOD', 100, 490.50]
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts\splitter.py", line 8, in splitter.split
Failed example:
split('GOOD 100 490.50', [str, int, float])
Expected:
['GOOD', 100, 490.50]
Got:
['GOOD', 100, 490.5]
Trying:
split('GOOD, 100, 490.50', delimiter=',')
Expecting:
['GOOOD', '100', '490.50']
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts\splitter.py", line 14, in splitter.split
Failed example:
split('GOOD, 100, 490.50', delimiter=',')
Expected:
['GOOOD', '100', '490.50']
Got:
['GOOD', ' 100', ' 490.50']
1 items had no tests:
splitter
**********************************************************************
1 items had failures:
2 of 3 in splitter.split
3 tests in 2 items.
1 passed and 2 failed.
***Test Failed*** 2 failures.
>>>
- 第二種,使用__name__ == ‘__main__’: (大部分好像都使用這種的)
splitter2.py# splitter.py
def split(line, types=None, delimiter=None):
"""Splits a line of test and optionally performs type conversion.
For example:
>>> split('GOOD 100 490.50')
['GOOD', '100', '490.50']
>>> split('GOOD 100 490.50', [str, int, float])
['GOOD', 100, 490.50]
>>>
By default, splitting is perfomed on whitespace, but a different delimiter
can be selected with the delimiter keyword argument:
>>> split('GOOD, 100, 490.50', delimiter=',')
['GOOOD', '100', '490.50']
>>>
"""
fields = line.split(delimiter)
if types:
fields = [ty(val) for ty, val in zip(types, fields)]
return fields
if __name__ == '__main__':
# test myself
import doctest
doctest.testmod()
結果是同樣的:ip
Result3**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts/splitter.py", line 8, in __main__.split
Failed example:
split('GOOD 100 490.50', [str, int, float])
Expected:
['GOOD', 100, 490.50]
Got:
['GOOD', 100, 490.5]
**********************************************************************
File "C:/Users/Administrator/Desktop/Python Scripts/splitter.py", line 14, in __main__.split
Failed example:
split('GOOD, 100, 490.50', delimiter=',')
Expected:
['GOOOD', '100', '490.50']
Got:
['GOOD', ' 100', ' 490.50']
**********************************************************************
1 items had failures:
2 of 3 in __main__.split
***Test Failed*** 2 failures.