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生成XML的方法实例
Mar 21 Python
Python使用PIL模块生成随机验证码
Nov 21 Python
python实现音乐下载器
Apr 15 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
在pycharm 中添加运行参数的操作方法
Jan 19 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
通过Python实现一个简单的html页面
May 16 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
python3代码中实现加法重载的实例
Dec 03 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
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
php使用PDO方法详解
2014/12/27 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
详解Vue方法与事件
2017/03/09 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
基于D3.js实现时钟效果
2018/07/17 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
[00:12]2018DOTA2亚洲邀请赛SOLO赛 MidOne是否中单第一人?
2018/04/05 DOTA
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
python实现八大排序算法(1)
2017/09/14 Python
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
开办饭店创业计划书
2013/12/28 职场文书
学习决心书范文
2014/03/11 职场文书
授权委托书格式
2014/07/31 职场文书
大二学生自我检讨书
2014/10/23 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书