引言:

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. JSP学习之请求和响应编码

    今天的学习涉及到了 jsp中的两大函数 request(请求) 和 response(响应),这应该是大家学习jsp时最先碰到的两个对象,具体有什么作用呢?应该怎么用呢?请继续往下面看. 一.requ ...

  2. Android_四大组件之BroadcastReceiver

    一.概述 BroadcastReceiver是广播接收器,接收来自 系统或应用发出的广播信息 并进行相应的逻辑处理. 自定义BroadcastReceiver只需继承android.content.B ...

  3. Car的旅行路线 luogu P1027 (Floyd玄学Bug有点毒瘤)

    luogu题目传送门! Car的旅行路线  问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一 ...

  4. Rocket - 断句 - Diplomatic Design Patterns: A TileLink Case Study

    https://mp.weixin.qq.com/s/afRVgTCYs1Mxu898uSmVaQ 整理一篇介绍Diplomacy和TileLink的文章.   原文链接: https://carrv ...

  5. jchdl - RTL实例 - MOS6502 SoC

    https://mp.weixin.qq.com/s/H2UBmZa9fpM6_FM2_MucTQ   实现一个SoC作为顶层模块,包含Cpu.Mem两个子模块,并驱动运行.   参考链接 https ...

  6. Java实现 LeetCode 736 Lisp 语法解析(递归)

    736. Lisp 语法解析 给定一个类似 Lisp 语句的表达式 expression,求出其计算结果. 表达式语法如下所示: 表达式可以为整数,let 语法,add 语法,mult 语法,或赋值的 ...

  7. Java实现 LeetCode 396 旋转函数

    396. 旋转函数 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * B ...

  8. Java实现 蓝桥杯 乘积最大

    输入输出样例 输入样例#1: 4 2 1231 输出样例#1: 62 import java.util.Scanner; public class chengjizuida { public stat ...

  9. Java实现 LeetCode 42 接雨水

    42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这 ...

  10. java实现不连续处断开

    不连续处断开 下列代码运行结果为: 12345 23456 89 23456789 即把一个串从数字不连续的位置断开.试完善之. String s = "123452345689234567 ...