Python单元测试模块doctest的具体使用


Posted in Python onFebruary 10, 2020

开发高质量软件的过程中,我们经常会为每个函数编写测试,这样在开发过程中运行这些测试的时候就比较方便,doctest是一个python标准库自带的轻量单元测试工具,适合实现一些简单的单元测试。

doctest模块提供的这样的工具,用于扫描模块并验证程序文档字符串中嵌入的测试,在docstring中寻找到测试用例并执行,比较输出结果与期望值是否符合。

我们如何构造这些测试呢?很简单

在python的交互解释器中创建测试用例,并复制到docstring中

tip:doctest在docstring中寻找测试用例的时候,认为>>>是一个测试用例的开始,直到遇到空行或者下一个>>>,在两个测试用例之间有其他内容的话,会被doctest忽略(可以利用这个特性为测试用例编写一些注释)。

我先在我自己的项目下准备一个测试脚本quality_q.py:

def average(values):
  """Computes the arithmetic mean of a list of numbers.

  >>> print(average([20, 30, 70]))
  40.0
  """
  return sum(values) / len(values)


#
if __name__ == '__main__':
  import doctest
  doctest.testmod(verbose=True) # automatically validate the embedded tests
  # 那个verbose参数,如果设置为True则在执行测试的时候会输出详细信息。
  # 默认是False,表示运行测试时,只有失败的用例会输出详细信息,成功的测试用例不会输入任何信息。

启动测试的方法:

第一个是在__main__函数中调用了doctest.testmod()方法。
然后在交互解释器中执行运行脚本 python3 doctest_q.py

如果__main__函数有其他用途,不方便调用doctest.testmod()方法,那么可以用另外一种执行测试的方法:

在交互解释器中执行如下命令执行测试: python3 -m doctest doctest_q.py -v
这里 -m 表示引用一个模块,-v 等价于 verbose=True

因为我是在Pycharm中创建的文件,我就直接打开Pycharm的Terminal,然后在交互解释器中切换一下脚本目录,执行的上面说到的启动方式,(顺便复习一下os模块的常用操作)
ps:读者在测试自己的例子时只需注意一下自己的当前工作目录即可

看一下最后的结果:

➜ ForF python3
Python 3.7.3 (default, Mar 27 2019, 09:23:15)
[Clang 10.0.1 (clang-1001.0.46.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> import os

>>> os.getcwd()
'/Users/dengjiguang/PycharmProjects/ForF'
>>> os.chdir('/Users/dengjiguang/PycharmProjects/ForF'+'/python_sample/quality_control')

>>> os.system('python3 -m doctest doctest_q.py -v')
Trying:
  print(average([20, 30, 70]))
Expecting:
  40.0
ok
1 items had no tests:
  doctest_q
1 items passed all tests:
  1 tests in doctest_q.average
1 tests in 2 items.
1 passed and 0 failed.
Test passed.
0
>>>

os.getcwd():返回当前的工作目录
os.chdir(‘path'):切换工作目录
os.system(‘command'): 执行系统shell命令

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python学习之编写查询ip程序
Feb 27 Python
Python减少循环层次和缩进的技巧分析
Mar 15 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
Python检测生僻字的实现方法
Oct 23 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 Python
在keras中实现查看其训练loss值
Jun 16 Python
Python 3.9的到来到底是意味着什么
Oct 14 Python
python中使用.py配置文件的方法详解
Nov 23 Python
教你使用一行Python代码玩遍童年的小游戏
Aug 23 Python
virtualenv隔离Python环境的问题解析
Jun 21 Python
简单了解django文件下载方式
Feb 10 #Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 #Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 #Python
解决tensorflow添加ptb库的问题
Feb 10 #Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 #Python
python如何实现单链表的反转
Feb 10 #Python
基于python求两个列表的并集.交集.差集
Feb 10 #Python
You might like
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
Node.js实现数据推送
2016/04/14 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
Python flask框架端口失效解决方案
2020/06/04 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
Python3获取cookie常用三种方案
2020/10/05 Python
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
类和结构的区别
2012/08/15 面试题
计算机专业个人简短的自我评价
2013/10/23 职场文书
标准毕业生自荐信范文
2013/11/04 职场文书
农业开发项目建议书
2014/05/16 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书
筑梦中国心得体会
2016/01/18 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书