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