python测试标准库doctest
引言:
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的更多相关文章
- Python的标准库介绍与常用的第三方库
Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...
- 【python】标准库的大致认识
正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...
- python 使用标准库连接linux实现scp和执行命令
import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...
- Python 3标准库 第十四章 应用构建模块
Python 3标准库 The Python3 Standard Library by Example -----------------------------------------第十四章 ...
- Python:标准库(包含下载地址及书本目录)
下载地址 英文版(文字版) 官方文档 The Python Standard Library <Python标准库>一书的目录 <python标准库> 译者序 序 前言 第1章 ...
- 《Python 3标准库》
在本书中,你会看到用来处理文本.数据类型.算法.数学计算.文件系统.网络通信.Internet.XML.Email.加密.并发性.运行时和语言服务等各个方面的实用代码和解决方案.在内容安排上,每一节都 ...
- python常用标准库(os系统模块、shutil文件操作模块)
常用的标准库 系统模块 import os 系统模块用于对系统进行操作. 常用方法 os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作.文件的删除创建等详细资料可以参考官方文 ...
- python linecache标准库基础学习
#python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...
- python StringIO标准库基础学习
#标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连 ...
随机推荐
- 上古神器vim系列之移动三板斧
[导读] 前文总结了vim如何进入,如何保存退出,如何进入编辑模式.本文来总结一些稍微进阶的内容,在normal模式下如何高效的浏览代码. 模式回顾 在normal模式下主要用于浏览代码,那么有哪些方 ...
- toString()方法的使用
toString()方法: java.lang.Object类的toString()方法的定义如下: public String toString(){ return getClass().getNa ...
- GitHub 热点速览 Vol.22:如何打造超级技术栈
作者:HelloGitHub-小鱼干 摘要:build-your-own-x,无论是新手还是老手,这都是一个指向标.方向有了,剩下就是时间和实践的事情,收集了大量可用于软件和 Web 开发的 Publ ...
- jQuery-简单理解
1.概念 jQuery是js的一个类库,主要封装的是js中DOM操作部分,使用和原生js一样 2.代码展示 HTML部分 封装原理 test测试 JS部分 //声明对象 var bjsxt = {}; ...
- 啪啪,打脸了!领导说:try-catch必须放在循环体外!
哈喽,亲爱的小伙伴们,技术学磊哥,进步没得说!欢迎来到新一期的性能解读系列,我是磊哥. 今天给大家带来的是关于 try-catch 应该放在循环体外,还是放在循环体内的文章,我们将从性能和业务场景分析 ...
- Rocket - util - MaskGen
https://mp.weixin.qq.com/s/_aJqf1cFJDK5RVRBhxTWOw 介绍MaskGen的实现. 1. 基本介绍 给定总线宽度beatBytes,根 ...
- (Java实现) 洛谷 P1036 选数
输入输出格式 输入格式: 键盘输入,格式为: n,k x1,x2,x3-xn 输出格式: 屏幕输出,格式为: 11个整数(满足条件的种数). 输入输出样例 输入样例#1: 4 3 3 7 12 19 ...
- Java实现 蓝桥杯VIP 算法提高 超级玛丽
算法提高 超级玛丽 时间限制:1.0s 内存限制:256.0MB 问题描述 大家都知道"超级玛丽"是一个很善于跳跃的探险家,他的拿手好戏是跳跃,但它一次只能向前跳一步或两步.有一次 ...
- Java实现蓝桥杯二项式的系数规律
二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学家杨辉1261年所著的<详解九章算法>一书里就出现了. 其排列规律: 1 1 1 2 1 3 3 1 4 6 4 ...
- Node第三方模块
node第三方模块集合 1.nrm 切换npm下载的镜像地址 nrm ls 查看可用镜像 nrm use +镜像名 2.nodemon 在控制台nodenom替代node命令执行nodejs文件, ...