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 相关文章推荐
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
用Python逐行分析文件方法
Jan 28 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
Python实现序列化及csv文件读取
Jan 19 Python
flask框架自定义url转换器操作详解
Jan 25 Python
python计算波峰波谷值的方法(极值点)
Feb 18 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
python爬虫分布式获取数据的实例方法
Nov 26 Python
Python超详细分步解析随机漫步
Mar 17 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
PHP4中session登录页面的应用
2008/07/25 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
javascript工具库代码
2012/03/29 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
python学习开发mock接口
2019/04/28 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
python time()的实例用法
2020/11/03 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
美国电视购物HSN官网:HSN
2016/09/07 全球购物
优质的学校老师推荐信
2013/10/28 职场文书
高级技校毕业生自荐信
2013/11/18 职场文书
前处理组长岗位职责
2014/03/01 职场文书
大学生演讲稿
2014/04/25 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书