技术开发 频道

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

  nose 框架和可执行模块

  对于 nose 框架应该注意一点:它在默认情况下回避那些标为可执行的 Python 模块。(在 Linux? 上,可以使用 chmod +x 这样的命令把文件标为可执行命令)。nose 框架忽略这样的文件,因为这些模块被设计为直接从命令行运行,它们可能执行某些对于 import 不安全的操作。

  但是,可以用一个 if 语句检查模块是直接运行还是导入,从而保护它们执行的实际操作,这样就可以安全地导入命令:

 

#!/usr/bin/env python
# Sample Python command

if __name__ == '__main__':
print "This has been run from the command line!"

 

  如果对每个命令都采用这种保护措施,因此知道它们是可以安全地导入的,那么就可以通过 --exe 命令行选项让 nose 检查可执行模块。

  在这个方面,我更喜欢 py.test 的做法:它不考虑 Python 模块是否是可执行的,这使它的规则比 nose 的规则简单,并强制实施非常好的实践(比如用 if 语句保护命令逻辑)。但是,如果要对遗留应用程序使用测试框架,程序可能包含许多代码质量不确定的可执行模块,那么 nose 似乎是更安全的工具。

  结束语

  本文详细讨论了这三种 Python 测试框架如何检查代码基并选择它们认为包含测试的模块。通过提供基于统一约定的自动发现,这三种测试框架都有助于编写更一致的测试套件,框架可以自动地检测和检查它们。但是,测试框架接下来会做什么?它们会在这些模块内寻找 什么?这是 本系列 的第三篇文章的主题!

0
相关文章