WEB开发网
开发学院软件开发Python Python 中的测试框架 阅读

Python 中的测试框架

 2007-03-30 12:35:07 来源:WEB开发网   
核心提示:在这一期文章中,David 研究了 Python 的两个用于单元测试的标准模块: unittest 和 doctest ,Python 中的测试框架,这些模块扩展了用来确认函数内部的先置条件和后置条件的内置 assert 语句的能力,David 讨论了将测试融入到 Python 开发中的最好方法,我尝试使用 Pytho

在这一期文章中,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."

1 2 3 4 5 6  下一页

Tags:

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接