我刚打哪里鼻子不会运行的测试标记为可执行文件(如中描述的行为上一个问题 )。 我发现这个惊人的,我浪费了一些时间,试图找出为什么鼻子不运行我的测试之前,我学到了鼻子的行为在这里。
在联机帮助页nosetests,它描述了一个选项,以覆盖缺省行为:
--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]
我的问题是:什么是“进口安全”呢? 什么是一个非进口安全模块的例子吗? 并能在非进口安全模块通过删除可执行位进行进口安全的,或者是有更多的什么原因呢?
我不熟悉的鼻子,但我敢肯定它的意思是“进口安全”是导入模块将刚刚定义的东西,而不是去关和运行的东西。
这个想法是,如果一个.py文件被设计为一个脚本来执行,那么它的功能将在执行模块范围代码启动。 这可能对与进口把守__name__ == '__main__'
的把戏,但它可能不是。 如果不是,将其导入可能会做的时候不带任何参数,在某些情况下可能是个坏调用它会做一个脚本,同样的事情。
所以,你可以明确地告诉鼻子,有没有这样的可执行脚本,那将是危险的通过将导入--exe
标志,或者你可以从你的脚本清除可执行权限。
“进口安全”没有一个特定的,定义的含义。 在这种情况下,关键是,Python模块可以做一些进口时(记住,导入模块只是意味着执行它并保存所有的东西在其命名空间)。
如果模块标有可执行位, nose
假设是这种情况-因为你可能不希望这些东西发生在每次运行测试时,它会跳过模块。
它指的是可以被两个进口或作为脚本执行模块。 这通常是通过下面的一段代码来完成:
if __name__ == "__main__":
print "running as script"
如果本来是可执行的脚本没有这个检查,进口将立即执行,这将可能有有害的副作用或异常凸起末端。