引言:

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

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

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

基本使用:

1.通过Docstrings测试

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

 '''
docstrings可以放的位置1 >>> sum(1, 3)
4 ''' def sum(a, b):
'''
docstrings可以放的位置2
>>> sum(3, 5)
8 >>> sum('a', 'c')
'ac'
'''
return a + b if __name__ == "__main__":
import doctest
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:
99
Got:
4
**********************************************************************
1 items had failures:
1 of 1 in __main__
***Test Failed*** 1 failures.

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

>>> sum(1, 3)

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

我们再看一下

if __name__ == "__main__":
import doctest
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()

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

python测试标准库doctest的更多相关文章

  1. Python的标准库介绍与常用的第三方库

    Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...

  2. 【python】标准库的大致认识

    正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...

  3. python 使用标准库连接linux实现scp和执行命令

    import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...

  4. Python 3标准库 第十四章 应用构建模块

    Python 3标准库 The Python3 Standard Library by  Example -----------------------------------------第十四章   ...

  5. Python:标准库(包含下载地址及书本目录)

    下载地址 英文版(文字版) 官方文档 The Python Standard Library <Python标准库>一书的目录 <python标准库> 译者序 序 前言 第1章 ...

  6. 《Python 3标准库》

    在本书中,你会看到用来处理文本.数据类型.算法.数学计算.文件系统.网络通信.Internet.XML.Email.加密.并发性.运行时和语言服务等各个方面的实用代码和解决方案.在内容安排上,每一节都 ...

  7. python常用标准库(os系统模块、shutil文件操作模块)

    常用的标准库 系统模块 import os 系统模块用于对系统进行操作. 常用方法 os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作.文件的删除创建等详细资料可以参考官方文 ...

  8. python linecache标准库基础学习

    #python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...

  9. python StringIO标准库基础学习

    #标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连 ...

随机推荐

  1. 【JavaScript数据结构系列】06-双向链表DoublyLinkedList

    [JavaScript数据结构系列]06-双向链表DoublyLinkedList 码路工人 CoderMonkey 转载请注明作者与出处 1. 认识双向链表 不同于普通链表/单向链表,双向链表最突出 ...

  2. 自定义cursor鼠标 图片

    1.CSS3自定义鼠标样式 最近想要使用自定义鼠标样式,看了cursor的样式不好看,就想到cursor属性能不能自定义图片,翻看了下CSS3文档,发现是可以的 格式为:cursor:url('图片u ...

  3. C#线程 线程进阶

    第四部分:高级线程 非阻塞同步 前面我们说过,即使在分配或增加字段的简单情况下,也需要同步.尽管锁定始终可以满足此需求,但是竞争性锁定意味着线程必须阻塞,从而遭受上下文切换的开销和调度的延迟,这在高度 ...

  4. Rocket - tilelink - RAMModel

    https://mp.weixin.qq.com/s/9ccDTm6HytvfGN5R2CPoAQ   简单介绍RAMModel的实现.   ​​   1. 基本介绍   RAMModel用于定义内存 ...

  5. jchdl - GSL实例 - Sub(二的补码实现)

    https://mp.weixin.qq.com/s/10fgjqPt2pRvIJzjDGYgBg   概念辨析   <IC-二进制, 自然数, 有符号数>:https://mp.weix ...

  6. 【大厂面试02期】Redis过期key是怎么样清理的?

    PS:本文已收录到1.1K Star数开源学习指南--<大厂面试指北>,如果想要了解更多大厂面试相关的内容,了解更多可以看 http://notfound9.github.io/inter ...

  7. 大型可视化项目用什么工具好呢?——不如了解一下阿里云DataV尊享版

    随着信息化的发展和进步,可视化大屏开始为社会各行业提供全面应用.目前越来越多的需求显示希望大屏能够更直观的还原出所要展示数据可视化的真实场景,让整个项目更立体.更有科技感,让项目在面对复杂操作时能灵活 ...

  8. Java实现 洛谷 采药

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...

  9. (Java实现) 拦截导弹

    1260:[例9.4]拦截导弹(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4063 通过数: 1477 [题目描述] 某国为了防御敌国的导弹袭击,发展出一 ...

  10. Java实现N的N次幂

    如果x的x次幂结果为10(参见[图1.png]),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字. 请把x的值计算到小数后6位(四舍五入),并填写这个小数值. 注意:只填写一个小数, ...