Python 中的测试框架
2007-03-30 12:35:07 来源:WEB开发网在这一期文章中,David 研究了 Python 的两个用于单元测试的标准模块: unittest 和 doctest 。这些模块扩展了用来确认函数内部的先置条件和后置条件的内置 assert 语句的能力。David 讨论了将测试融入到 Python 开发中的最好方法,同时权衡了用于不同类型项目的不同风格的优势。
我要坦白一点。尽管我是一个应用相当广泛的公共域 Python 库的创造者,但在我的模块中引入的单元测试是非常不系统的。实际上,那些测试大部分 是包括在 gnosis.xml.pickle 的 Gnosis Utilities 中的,并由该子软件包(subpackage)的贡献者所编写。我还发现,我下载的绝大多数第三方 Python 包都缺少完备的单元测试集。
不仅如此,Gnosis Utilities 中现有的测试也受困于另一个缺陷:您经常需要在极其大量的细节中去推定期望的输出,以确定测试的成败。测试实际上 -- 在很多情况下 -- 更像是使用库的某些部分的小实用工具。这些测试(或实用工具)支持来自任意数据源(类型正确)的输入和/或描述性数据格式的输出。实际上,当您需要调试一些细微的错误时,这些测试实用工具更有用。但是对于库版本间变化的自解释的完整性检查(sanity checks)来说,这些类测试就不能胜任了。
在这一期文章中,我尝试使用 Python 标准库模块 doctest 和 unittest 来改进我的实用工具集中的测试,并带领您与我一起体验(并指出一些最好的方法)。
脚本 gnosis/xml/objectify/test/test_basic.py 给出了一个关于当前测试的缺点及解决方案的典型示例。下面是该脚本的最新版本:
清单 1. test_basic.py
"Read and print and objectified XML file"
import sys
from gnosis.xml.objectify import XML_Objectify, pyobj_printer
if len(sys.argv) > 1:
for filename in sys.argv[1:]:
for parser in ('DOM','EXPAT'):
try:
xml_obj = XML_Objectify(filename, parser=parser)
py_obj = xml_obj.make_instance()
print pyobj_printer(py_obj).encode('UTF-8')
sys.stderr.write("++ SUCCESS (using "+parser+")
")
print "="*50
except:
sys.stderr.write("++ FAILED (using "+parser+")
")
print "="*50
else:
print "Please specify one or more XML files to Objectify."
- ››python操作sharepoint对象模型
- ››Python 2.6.2的.pyc文件格式
- ››Python 2.6.2的字节码指令集一览
- ››Python 测试框架: 用 Python 测试框架简化测试
- ››Python 测试框架: 寻找要测试的模块
- ››Python的class系统
- ››Python 和 LDAP
- ››python图形处理库PIL(Python Image Library)
- ››Python图形图像处理库的介绍之Image模块
- ››Python和Google AppEngine开发基于Google架构的应...
- ››Python 3 初探,第 1 部分: Python 3 的新特性
- ››python源码中中文注释的处理
更多精彩
赞助商链接