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

相关文章
相关标签/搜索