WEB开发网
开发学院软件开发Python Python 测试框架: 寻找要测试的模块 阅读

Python 测试框架: 寻找要测试的模块

 2010-09-22 11:22:53 来源:WEB开发网   
核心提示: 自动 Python 模块发现zope.testing、py.test 和 nose 的一个关键特性是,它们都可以搜索项目的源代码树,Python 测试框架: 寻找要测试的模块(4),寻找项目的所有测试,所以不需要集中的测试列表,与 py.test 不同,nose 可以正确地处理包含同名测试

自动 Python 模块发现

zope.testing、py.test 和 nose 的一个关键特性是,它们都可以搜索项目的源代码树,寻找项目的所有测试,所以不需要集中的测试列表。但是,它们采用的测试发现规则不太一样,在选择框架时需要考虑到这一点。

测试框架执行的第一步是,选择将在哪些目录中搜索包含测试的文件。注意,这三种框架都从整个项目的基目录开始搜索;如果要测试名为 example 的包,那么它们会从包含 example 的父目录开始搜索测试。但是,这三种框架在选择搜索哪些目录方面有所差异:

zope.testing 工具向下递归地搜索是 Python 包的所有目录,也就是包含 __init__.py 文件的目录(对于 Python,这说明可以用 import 语句导入它们)。这意味着不检查非包目录中的数据和代码,但是另一方面,这也意味着从理论上说程序员可以用 import 语句导入您编写的每个测试。一些程序员觉得这让人不舒服,希望能够把测试放在包的一般用户看不到的地方。

py.test 命令向下递归地搜索项目的每个目录和子目录,无论目录是否是 Python 包。注意,当两个相邻目录包含同名的测试时,它似乎有一个 bug。例如,如果相邻的 dir1/test.py 和 dir2/test.py 文件都包含名为 test_example 的测试,那么 py.test 将运行第一个测试两次,而完全忽略第二个测试!如果为 py.test 编写测试并把它们放在非包目录中,就要注意保持名称是惟一的。

nose 测试运行器采用的实现方式介于另两种工具之间:它向下递归地搜索每个 Python 包,但是只检查目录名中包含单词 test 的目录。这意味着,如果不想让 nose 搜索某个目录,那么只需注意不在目录名中包含 test 即可。与 py.test 不同,nose 可以正确地处理包含同名测试的相邻目录(但是保持测试名称惟一仍然是有帮助的,这样在用 -v 选项显示测试结果时不容易混淆)。

上一页  1 2 3 4 5 6 7  下一页

Tags:Python 框架

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