Python单元测试模块doctest的具体使用

作者:MarsenSeven 时间:2021-02-26 16:50:12 

开发高质量软件的过程中,我们经常会为每个函数编写测试,这样在开发过程中运行这些测试的时候就比较方便,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命令

来源:https://blog.csdn.net/qq_36609501/article/details/104238234

标签:Python,单元测试,doctest模块
0
投稿

猜你喜欢

  • sql不常用函数总结以及事务,增加,删除触发器

    2012-07-11 16:03:42
  • go中的unsafe包及使用详解

    2023-10-13 17:07:27
  • Python如何实现自动发送邮件

    2022-05-09 04:22:55
  • PHP的mysqli_set_charset()函数讲解

    2023-07-11 06:22:17
  • Opencv实现二维直方图的计算及绘制

    2023-07-18 23:34:52
  • Python ArcPy实现批量计算多时相遥感影像的各项元平均值

    2022-06-04 14:45:51
  • Python中函数参数匹配模型详解

    2022-01-01 20:39:59
  • win10系统下Anaconda3安装配置方法图文教程

    2022-08-06 23:01:49
  • ThinkPHP 3.2 版本升级了哪些内容

    2023-09-05 04:22:04
  • Oracle 8x监控sysdba角色用户登陆情况

    2010-07-16 12:48:00
  • 利用django如何解析用户上传的excel文件

    2022-04-04 04:45:20
  • 客户端限制只能上传jpg格式图片的js代码

    2023-07-16 00:56:04
  • python在windows调用svn-pysvn的实现

    2022-03-15 05:13:48
  • Python ftp上传文件

    2023-10-01 06:35:34
  • 在Heroku云平台上部署Python的Django框架的教程

    2022-02-28 08:46:49
  • Python之字典添加元素的几种方法

    2022-11-13 13:37:23
  • Python wxpython模块响应鼠标拖动事件操作示例

    2022-11-01 04:40:16
  • 教你用Python写一个植物大战僵尸小游戏

    2021-07-19 22:59:37
  • 详解Python自建logging模块

    2023-12-21 02:28:50
  • python文件和目录操作方法大全(含实例)

    2021-11-11 14:10:29
  • asp之家 网络编程 m.aspxhome.com