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实现判断数组是否包含指定元素的方法
Jul 15 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
Python中turtle作图示例
Nov 15 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
PyQt5每天必学之组合框
Apr 20 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
python多进程并发demo实例解析
Dec 13 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
Python如何实现远程方法调用
Aug 07 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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
一个odbc连mssql分页的类
2006/10/09 PHP
php 分页函数multi() discuz
2009/06/21 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
Python 列表(List)操作方法详解
2014/03/11 Python
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
python 日志增量抓取实现方法
2018/04/28 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
python实现FTP循环上传文件
2020/03/20 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
JAVA软件工程师测试题
2014/07/25 面试题
服务生自我鉴定
2014/01/22 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
单位接收函范文
2015/01/30 职场文书
恰同学少年观后感
2015/06/08 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技