7

我只是遇到了鼻子不会运行标记为可执行的测试的行为(如上一个问题中所述)。我发现这很令人惊讶,在我了解鼻子的行为之前,我浪费了一些时间试图找出为什么鼻子没有运行我的测试。

在鼻子测试的手册页中,它描述了一个覆盖默认行为的选项:

--exe               Look for tests in python modules that are executable.
                    Normal behavior is to exclude executable modules,
                    since they may not be import-safe [NOSE_INCLUDE_EXE]

我的问题是:“进口安全”是什么意思?什么是非导入安全模块的示例?并且可以通过删除可执行位使非导入安全模块成为导入安全模块,还是还有更多?

4

3 回答 3

5

我不熟悉鼻子,但我很确定“导入安全”的含义是导入模块只会定义事物,而不是开始运行事物。

这个想法是,如果 .py 文件被设计为作为脚本执行,那么它的功能将在执行模块范围代码时启动。这可以防止使用__name__ == '__main__'技巧导入,但可能不是。如果不是,则导入它可能会执行与不带参数调用脚本时相同的操作,这在某些情况下可能会很糟糕。

因此,您可以通过传递标志明确告诉鼻子没有这样的可执行脚本会危险地导入--exe,或者您可以从脚本中清除可执行权限。

于 2012-04-26T09:35:16.700 回答
5

“进口安全”没有特定的定义含义。在这种情况下,重点是 Python 模块在导入时可以做一些事情(请记住,导入模块只是意味着执行它并将所有内容保存在其命名空间中)。

如果模块标有可执行位,nose则假设是这种情况——并且由于您可能不希望每次运行测试时都发生这种情况,因此它将跳过该模块。

于 2012-04-26T09:29:10.547 回答
4

它指的是可以作为脚本导入或执行的模块。这通常由以下代码完成:

if __name__ == "__main__":
    print "running as script"

如果本来可以执行的脚本没有进行此检查,则导入将立即执行它,这可能会以不需要的副作用或引发异常而结束。

于 2012-04-26T09:27:38.187 回答