我正在为一个大型 Python 项目策划大量单元测试。我们使用nose进行我们的测试发现和执行。我有一些测试文件确实不应该在某些条件下运行。例如,也许我有一个永远不应该在 Windows 上运行的测试模块(仅在 Mac 和 Linux 上)。
以下是我使用过的一些解决方案:
- 使用 Nose 的优秀工具 attrib plugin 标记测试方法或类的条件.
- 使用unittest.skipIf()关于测试方法或类
- 使用nose's pattern exclusions例如,跳过名称中带有
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 停止读取模块,但没有错误?我想我正在寻找相当于提前返回的进口。
最佳答案
能够从模块的执行中提前返回has been proposed before但它收到了一些反对票,并且该功能没有添加到该语言中。
您可以阅读邮件列表线程,但通常认为必须将模块的大部分缩进额外级别的问题并不是添加此“返回”功能的充分理由。有人说模块中的几乎所有代码无论如何都应该位于函数和类内部,几乎没有模块级代码会受到此问题的影响。
关于python - 如何在 Nose 下执行 "early return"导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15035996/