Python doctest模块:文档字符串中的自动化单元测试指南
本文详细介绍Python标准库doctest的使用方法。通过解析文档字符串(Docstring)中的交互式示例,doctest能自动验证代码输出是否符合预期。文章涵盖测试用例构造规范、在__main__中调用testmod()以及通过命令行python3 -m doctest执行测试的具体步骤,帮助开发者在开发过程中便捷地实现轻量级单元测试。
doctest模块简介与核心功能
在开发高质量软件时,为每个函数编写测试是常见做法,这有助于在开发阶段方便地运行验证。doctest作为Python标准库内置的轻量级单元测试工具,非常适合用于实现简单的单元测试场景。
doctest模块的主要功能是扫描Python模块,并验证嵌入在程序文档字符串(Docstring)中的测试用例。它会在Docstring中定位测试用例并执行,随后比较实际输出结果与期望值是否一致。
测试用例的构造与规范
构造这些测试用例的过程非常简单。
具体做法是在Python交互解释器中创建测试用例,然后将其复制到代码的Docstring中。
需要注意的是,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__中调用testmod()
启动测试的方法主要有两种。
第一种方法是在__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模块的常用操作)。提示:读者在测试自己的示例时,只需注意当前工作目录即可。
以下是测试运行的最终结果展示。
➜ 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模块常用操作包括:os.getcwd()用于返回当前工作目录;os.chdir('path')用于切换工作目录;os.system('command')用于执行系统shell命令。
以上就是本文的全部内容,希望这对大家的学习有所帮助,也欢迎大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













