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基础教程之类class定义使用方法
Feb 20 Python
python实现多线程的两种方式
May 22 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
详解TensorFlow在windows上安装与简单示例
Mar 05 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
python实现关闭第三方窗口的方法
Jun 28 Python
python内置函数sorted()用法深入分析
Oct 08 Python
tensorflow 环境变量设置方式
Feb 06 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
Python流程控制语句的深入讲解
Jun 15 Python
学python爬虫能做什么
Jul 29 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
php实现json编码的方法
2015/07/30 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
python实现求最长回文子串长度
2018/01/22 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
python中os.remove()用法及注意事项
2021/01/31 Python
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
什么是makefile? 如何编写makefile?
2013/01/02 面试题
文明礼仪事迹材料
2014/01/09 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
幼儿发展评估方案
2014/06/11 职场文书
家庭教育的心得体会
2014/09/01 职场文书
合伙经营协议书范本
2014/09/13 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
详解python网络进程
2021/06/15 Python