Python中的文档测试模块

   这篇文章主要介绍了Python中的文档测试模块,代码基于Python2.x版本,需要的朋友可以参考下

  如果你经常阅读Python的官方文档,可以看到很多文档都有示例代码。比如re模块就带了很多示例代码:

  ?

1
2
3
4

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'

  可以把这些示例代码在Python的交互式环境下输入并执行,结果与文档中的示例代码显示的一致。

  这些代码与其他说明可以写在注释中,然后,由一些工具来自动生成文档。既然这些代码本身就可以粘贴出来直接运行,那么,可不可以自动执行写在注释中的这些代码呢?

  答案是肯定的。

  当我们编写注释时,如果写上这样的注释:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14

def abs(n):
'''
Function to get absolute value of number.
 
Example:
 
>>> abs(1)
1
>>> abs(-1)
1
>>> abs(0)
0
'''
return n if n >= 0 else (-n)

  无疑更明确地告诉函数的调用者该函数的期望输入和输出。

  并且,Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试。

  doctest严格按照Python交互式命令行的输入和输出来判断测试结果是否正确。只有测试异常的时候,可以用...表示中间一大段烦人的输出。

  让我们用doctest来测试上次编写的Dict类:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

class Dict(dict):
'''
Simple dict but also support access as x.y style.
 
>>> d1 = Dict()
>>> d1['x'] = 100
>>> d1.x
100
>>> d1.y = 200
>>> d1['y']
200
>>> d2 = Dict(a=1, b=2, c='3')
>>> d2.c
'3'
>>> d2['empty']
Traceback (most recent call last):
...
KeyError: 'empty'
>>> d2.empty
Traceback (most recent call last):
...
AttributeError: 'Dict' object has no attribute 'empty'
'''
def __init__(self, **kw):
super(Dict, self).__init__(**kw)
 
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError(r"'Dict' object has no attribute '%s'" % key)
 
def __setattr__(self, key, value):
self[key] = value
 
if __name__=='__main__':
import doctest
doctest.testmod()

  运行python mydict.py:

  ?

1

$ python mydict.py

  什么输出也没有。这说明我们编写的doctest运行都是正确的。如果程序有问题,比如把__getattr__()方法注释掉,再运行就会报错:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

$ python mydict.py
**********************************************************************
File "mydict.py", line 7, in __main__.Dict
Failed example:
d1.x
Exception raised:
Traceback (most recent call last):
...
AttributeError: 'Dict' object has no attribute 'x'
**********************************************************************
File "mydict.py", line 13, in __main__.Dict
Failed example:
d2.c
Exception raised:
Traceback (most recent call last):
...
AttributeError: 'Dict' object has no attribute 'c'
**********************************************************************

  注意到最后两行代码。当模块正常导入时,doctest不会被执行。只有在命令行运行时,才执行doctest。所以,不必担心doctest会在非测试环境下执行。

  小结

  doctest非常有用,不但可以用来测试,还可以直接作为示例代码。通过某些文档生成工具,就可以自动把包含doctest的注释提取出来。用户看文档的时候,同时也看到了doctest。

时间: 2024-10-04 13:51:13

Python中的文档测试模块的相关文章

Winform开发框架中的内容及文档管理模块功能介绍

在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInform项目中利用ZetaHtmlEditControl进行HTML内容管理,以及利用TX TextControl控件进行WORD文档管理,这两方面都是我们一般进行内容和文档管理所必须的. 1.内容及文档管理模块功能介绍 整个模块,支持WInform框架和混合式开发框架两种模式,都是基于WInform

Python开发者面向文档编程的正确姿势

概述 秦人不暇自哀,而后人哀之;后人哀之而不鉴之,亦使后人而复哀后人也! –论面向文档编程的重要性 如果想看见识一个人写代码的功力,注释其实是区分老司机和小鲜肉的一个显著的分界线(有没有观察到你们公司的领导基本都在开会或者写文档),通常情况下老司机的文档量与代码量是1:1的比例,而新人往往认为写完功能模块就已经可以完成任务了.生产环境中需要面对现实中大量复杂的业务逻辑和数据校验并与各方对接,文档质量和代码质量就被提升到了相同的高度.很多人没有写注释的习惯,大多数不是因为懒惰,一方面是没有意识到写

研究 Java 中 XML 文档模型的特性和性能

xml|性能 Java 中的 XML: 文档模型,第一部分:性能 研究 Java 中 XML 文档模型的特性和性能 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 - 下载免费软件,快速启动开发 级别: 初级 Dennis M. Sosnoski, 总裁, Sosnoski Software Solutions, Inc. 2001 年 9 月 01 日 在本文中,Java 顾问 Dennis Sosnoski 比较几个 Java 文档模型的性能和功能.当选择模型时,无法做

软件项目中的文档管理(上)

文档管理,有些公司也称为知识库管理,本文还是以文档作为称呼吧. 1.先说说文档管理的历史背景和演化史吧 一般情况下,文档可以包含很多方面的内容,一个Excel表格,一个需求设计文件,一个Bug的解决方案,一个功能的描述甚至是一个有用的图片都可以成为一个文档.所以对文档的标准解释就是文档是软件开发,使用和维护中的必备资料.它能提高软件开发的效率,保证软件的质量,而且在软件的使用过程中有指导,帮助,解惑的作用,尤其在维护工作中,文档是不可或缺的资料. 当然文档不仅仅是在软件开发中需要使用,其实是在任

《Adobe InDesign CC经典教程》—第2课2.9节在演示文稿模式中查看文档

2.9 在演示文稿模式中查看文档Adobe InDesign CC经典教程演示文稿模式中,InDesign界面完全隐藏,文档将铺满整个屏幕.这种模式非常适合于在便携式电脑上将设计理念呈现给客户. 提示:在演示文稿模式中不可编辑文档,但是在其他屏幕模式中可以进行修改. 单击工具面板底部的"预览"按钮并保持,然后选择"演示文稿" (图像说明文字). 文档查看完毕后,按下Escape键可退出演示文稿模式.该文档将以先前的正常模式显示. 如需查看没有布局辅助的文档,可从应用

qtcreator-Qt导出word文档,如何在代码中设置文档内容的样式?

问题描述 Qt导出word文档,如何在代码中设置文档内容的样式? RT.网上查了一下,基本都是用模板+书签的方法来插入内容,但是我现在想直接靠运行程序来生成一个文档,但是这就有一个问题,文档内容的格式就得写在代码之中,而不能像书签那样把格式定好了直接插内容就行.各位大神知道怎么弄吗? 解决方案 一样的,可以对Selection应用段落样式来实现.具体可以在word中录制一个宏,然后根据自动产生的VB代码照着写.

如何在Word 2013中插入文档摘要和关键字

用户可以根据需要在Word2013中插入文档摘要.文档关键词.文档作者等文档属性信息,这些内容可以插入到Word文档的任意位置(正文任意位置或页眉页脚),以方便阅读者了解该文档更丰富的信息.在Word2013文档中插入文档摘要和文档关键字的步骤如下所述: 第1步,打开Word2013文档窗口,并将插入点光标定位到需要插入文档信息的位置.切换到"插入"功能区,在"文本"分组中单击"文档部件"按钮.在打开的"文档部件"菜单中指向&

在Word 2010导航窗格中显示文档结构图和缩略图

用户可以在Word 2010新添加的"导航窗格"中查看文档结构图和页面缩略图,从而帮助用户快速定位文档位置.在Word 2010文档窗口中显示"文档结构图"和"页面缩略图"的步骤如下所述: 第1步,打开Word 2010文档窗口,切换到"视图"功能区.在"视图"功能区的"显示"分组中选中"导航窗格"复选框,如图2009122803所示. 009122803选中&quo

直接调用FTP服务器中Office文档

Word.Excel.PowerPoint等Office组件均提供了直接调用FTP服务器中文档的功能,它可以像处理本地文档一样方便地对FTP中支持的文档进行打开.编辑和保存等操作. 实现的方法是:在"打开"对话框中将"查找范围"选择为"FTP位置",然后双击"添加/更改FTP位置"图标,在"FTP站点名称"框中输入FTP服务器的IP地址,然后根据用户的权限设置"匿名"登录或使用用户名和密