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多线程学习资料
Dec 19 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
wxpython布局的实现方法
Nov 01 Python
如何基于Python实现自动扫雷
Jan 06 Python
Python-for循环的内部机制
Jun 12 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 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
用PHP将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
Python生成器(Generator)详解
2015/04/13 Python
Python中的匿名函数使用简介
2015/04/27 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
Python中过滤字符串列表的方法
2020/12/22 Python
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
天巡全球:Skyscanner Global
2017/06/20 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
JAVA软件工程师测试题
2014/07/25 面试题
公司领导推荐信
2013/11/12 职场文书
空气的环保标语
2014/06/12 职场文书
格林童话读书笔记
2015/06/30 职场文书
2016年公司新年寄语
2015/08/17 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python