我正在尝试创建一个带有模拟功能的文档测试,该功能位于单独的模块中
导入如下
from foomodule import foo
def bar():
"""
>>> from minimock import mock
>>> mock('foo', nsdicts=(bar.func_globals,), returns=5)
>>> bar()
Called foo()
10
"""
return foo() * 2
import doctest
doctest.testmod()
foomodule.py:
def foo():
raise ValueError, "Don't call me during testing!"
这失败了。
如果我将导入更改为导入foo模块并使用foo模块.foo到处
然后就可以了。
但是对于通过上述方式导入的模拟函数有什么解决方案吗?
您刚刚遇到了最好不要从“内部”模块导入对象的众多原因之一——仅导入模块本身(可能来自包内)。我们已将此规则作为 Google 风格指南的一部分(已发布)here http://google-styleguide.googlecode.com/svn/trunk/pyguide.html),我衷心推荐给每一位 Python 程序员。
话虽这么说,您需要做的就是获取刚刚用模拟替换的 foomodule.foo 并将其粘贴到当前模块中。我不记得足够的 doctest 内部来确认是否
>>> import foomodule
>>> foo = foomodule.foo
就足够了——尝试一下,如果不起作用,就改做
>>> import foomodule
>>> import sys
>>> sys.modules[__name__].foo = foomodule.foo
是的,这是一团糟,但造成这种混乱的原因是看起来天真无邪from foomodule import foo
-- 避免这种情况,你的生活会更简单、更有成效;-)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)