我正在为一个大型 Python 项目策划大量单元测试。我们使用鼻子来做我们的测试发现和执行。我有一些测试文件确实不应该在某些条件下运行。例如,也许我有一个永远不应该在 Windows 上运行的测试模块(仅在 Mac 和 Linux 上)。
以下是我使用过的一些解决方案:
- 使用 Nose 优秀的属性插件标记测试方法或类。
- 在测试方法或类上使用unittest.skipIf()
- 例如,使用鼻子的模式排除来跳过
windows
名称中的文件。
我对 1 和 2 的抱怨是这些迫使我导入模块,这至少是浪费时间,并且如果存在依赖于平台的导入,可能会导致错误。我不喜欢#3,因为我觉得它很脆弱,并且在阅读测试用例时不容易看出它会被跳过。这三个似乎都过度依赖于测试和测试运行器之间的交互,我想要一些只是在测试中的东西。
我想在测试模块的顶部执行以下操作:
"""This module should not be run on Windows"""
import platform
if platform.system() == 'Windows':
<stop reading this module. nothing to see here>
# do the tests.
如何告诉 Python 或 Nose 停止读取模块,但没有错误?我想我正在寻找相当于提前退货的进口商品。