python中doctest_python测试标准库doctest

引言:

doctest是python的一个测试用标准库。

顾名思义,这个模块会寻找程序里面看起来像交互式Python会话的文本片段,然后运行这个会话,来判断实际运行结果和你希望的结果是否一致。

这个模块可以用来进行回归测试,或者在编写教程性的文档时使用

基本使用:

1.通过Docstrings测试

我们先创建一个example.py,代码如下

1 '''

2 docstrings可以放的位置13

4 >>> sum(1, 3)5 46

7 '''

8

9

10 defsum(a, b):11 '''

12 docstrings可以放的位置213 >>> sum(3, 5)14 815

16 >>> sum('a', 'c')17 'ac'18 '''

19 return a +b20

21 if __name__ == "__main__":22 importdoctest23 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”,那么会显示没有通过的样例,如下。

$ python example.py**********************************************************************File"example.py", line 4, in __main__Failed example:

sum(1, 3)

Expected:99Got:4

**********************************************************************

1items had failures:1 of 1 in __main__

***Test Failed*** 1 failures.

还有一点要注意的是,文档注释里面的

>>> sum(1, 3)

">>>"后面记得跟一个空格

我们再看一下

if __name__ == "__main__":importdoctest

doctest.testmod()

如果你不想在__main__中执行testmod(),也可以不写,执行python -m doctest -v example.py也行。

2.通过Test File测试

我们新建一个文本文件example.txt,里面写入

>>> from example import sum

>>> sum(2, 3)

5

然后在example.py中替换testmod()函数为testfile()

importdoctest

doctest.testfile("example.txt")

然后和1一样,运行python example.py -v

同样的,如果你不想在example.py中运行testfile(),你也可以用如下命令

python -m doctest -v example.txt

3.如何写docstring

docstring模块会搜索所有的函数,类和方法的文档字符串,导入到模块中的对象不会去搜索。

大部分情况下,我们可以直接粘贴交互式控制台的输出到文档注释中。但是有几点是需要注意的。

预期输出不能包含全空白行。因为这会当成输出的结束。如果一定要有空白行,用替代

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值