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

开发高质量软件的过程中,我们经常会为每个函数编写测试,这样在开发过程中运行这些测试的时候就比较方便,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单元测试模块doctest的具体使用 的全部内容, 来源链接: utcz.com/z/358431.html

回到顶部