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来提供可移植性,与其他字符串连 ...
随机推荐
- JSP学习之请求和响应编码
今天的学习涉及到了 jsp中的两大函数 request(请求) 和 response(响应),这应该是大家学习jsp时最先碰到的两个对象,具体有什么作用呢?应该怎么用呢?请继续往下面看. 一.requ ...
- Android_四大组件之BroadcastReceiver
一.概述 BroadcastReceiver是广播接收器,接收来自 系统或应用发出的广播信息 并进行相应的逻辑处理. 自定义BroadcastReceiver只需继承android.content.B ...
- Car的旅行路线 luogu P1027 (Floyd玄学Bug有点毒瘤)
luogu题目传送门! Car的旅行路线 问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一 ...
- Rocket - 断句 - Diplomatic Design Patterns: A TileLink Case Study
https://mp.weixin.qq.com/s/afRVgTCYs1Mxu898uSmVaQ 整理一篇介绍Diplomacy和TileLink的文章. 原文链接: https://carrv ...
- jchdl - RTL实例 - MOS6502 SoC
https://mp.weixin.qq.com/s/H2UBmZa9fpM6_FM2_MucTQ 实现一个SoC作为顶层模块,包含Cpu.Mem两个子模块,并驱动运行. 参考链接 https ...
- Java实现 LeetCode 736 Lisp 语法解析(递归)
736. Lisp 语法解析 给定一个类似 Lisp 语句的表达式 expression,求出其计算结果. 表达式语法如下所示: 表达式可以为整数,let 语法,add 语法,mult 语法,或赋值的 ...
- Java实现 LeetCode 396 旋转函数
396. 旋转函数 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * B ...
- Java实现 蓝桥杯 乘积最大
输入输出样例 输入样例#1: 4 2 1231 输出样例#1: 62 import java.util.Scanner; public class chengjizuida { public stat ...
- Java实现 LeetCode 42 接雨水
42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这 ...
- java实现不连续处断开
不连续处断开 下列代码运行结果为: 12345 23456 89 23456789 即把一个串从数字不连续的位置断开.试完善之. String s = "123452345689234567 ...