python - 如何在 Nose 下执行 "early return"导入?

标签 python unit-testing nose unittest2

我正在为一个大型 Python 项目策划大量单元测试。我们使用nose进行我们的测试发现和执行。我有一些测试文件确实不应该在某些条件下运行。例如,也许我有一个永远不应该在 Windows 上运行的测试模块(仅在 Mac 和 Linux 上)。

以下是我使用过的一些解决方案:

  1. 使用 Nose 的优秀工具 attrib plugin 标记测试方法或类的条件.
  2. 使用unittest.skipIf()关于测试方法或类
  3. 使用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/

相关文章:

unit-testing - 测试 Angular 2 中 "(window:resize)"事件触发的函数

python - 对于假设策略,如何从 max_value 而不是 min_value 开始测试用例?

c# - 使用 UnitOfWork 模拟上下文和存储库

python - HTTPretty 测试卡在 Travis 上

python - 导入错误:没有名为 'nose' 的模块

python - 更改 theano 共享变量不会影响内部的值

python - 如何在 python 中清理文本文件?

python - 无法使用 pip install 安装 pika

python - 如何测试多个变量与单个值的相等性?

python - 按标签运行规范