【发布时间】:2014-05-20 00:21:32
【问题描述】:
nose 包通常用于运行doctests 以及专用测试文件中的测试。似乎即使在 doctest 文件中,它也会尝试运行 setup 和 teardown 固定装置。
当用于 doctesting 的模块碰巧需要一个名为 setup 的函数用于其他目的时——例如,它可能是一个 Sphinx extension——nosetests 将调用 setup 并失败。
为了清楚起见,这里是一个例子:
def my_tricky_function(arg):
"""Do something testable
>>> my_tricky_function(1)
2
"""
return arg + arg
def my_extension(app):
...
def setup(app):
"""Establish sphinx hooks"""
app.connect('build-finished', my_extension)
运行 nosestests 会导致:
File ".../site-packages/nose/suite.py", line 291, in setUp
self.setupContext(ancestor)
File ".../site-packages/nose/suite.py", line 314, in setupContext
try_run(context, names)
File ".../site-packages/nose/util.py", line 468, in try_run
return func(obj)
File "sphinx_ext.py", line 14, in setup
app.connect('build-finished', my_extension)
AttributeError: 'module' object has no attribute 'connect'
(注意:当setup 接受参数时,nosetest 通过setup 是名称的范围,在本例中为模块。)
请注意,以下内容不(似乎)适用:
- 将属性
__test__ = False(或使用this decorator)添加到setup并不会阻止它被调用。 - 没有等效于
--ignore-files的命令行选项 - 设置
my_tricky_function.setup = None不会停止模块级设置 (h/t @alecxe)
【问题讨论】:
-
只是在黑暗中拍摄 - 设置
my_tricky_function.setup = None有帮助吗?
标签: python python-sphinx nose doctest