Python 测试框架: 选择和运行测试
2009-09-06 00:00:00 来源:WEB开发网实际上,z3c.testsetup 用户一般不使用 zope.testing 的测试模块发现功能。相反,他们绕开 zope.testing 的算法,按照它的默认行为只寻找名为 test.py 的模块,然后在整个源代码树中只提供一个采用此名称的模块。在最简单的情况下,他们的 test.py 像下面这样:
import z3c.testsetup
test_suite = z3c.testsetup.register_all_tests(my_package)
这完全不通过 zope.testing 执行测试发现任务,而是依靠 z3c.testsetup 本身提供的更强大的发现机制。
可以向 register_all_tests() 函数提供几个配置选项。详细信息请参见 z3c.testsetup 文档,这里只需要介绍它的基本行为。与本文讨论的其他框架不同,z3c.testsetup 在默认情况下不关心包中每个 Python 模块的名称,而是关注它的内容。它检查所有模块以及包中的所有 .txt 或 .rst 文件,选择文本中指定了 :Test-Layer: 的文件。然后,它组合模块中的所有 TestCase 和文本文件中的所有 doctest 部分,形成测试套件。
使用 :Test-Layer: 字符串标出包含测试的文件是一种有意思的机制。它的缺点是,在浏览包的文件时,为了找到测试的位置,新程序员必须打开每个文件,至少要用 grep 命令寻找 :Test-Layer: 字符串。(更不用提 z3c.testsetup 显然必须做同样的事;这使它比那些只操作文件名的框架要慢)。
最后注意,Zope 测试框架只支持 UnitTest 实例或 doctest。正如本系列的第一篇文章中讨论的,更现代的 Python 测试框架还支持一般的 Python 函数作为有效测试。这需要不同的测试检测算法,在下面讨论的框架中就会看到。
py.test 和 nose 中的测试发现
正如前一篇文章中提到的,py.test 和 nose 框架使用相似但略有差异的规则集搜索 Python 包,寻找它们认为包含测试的模块。但是,之后它们都会遇到相同的情况:它们必须检查模块列表,寻找开发人员希望作为测试运行的函数和类。
更多精彩
赞助商链接