Evg*_*nyt 3 python testing doctest mocking
我正在尝试创建一个带有模拟功能的文档测试,该功能位于单独的模块中,并按如下方式导入
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()
Run Code Online (Sandbox Code Playgroud)
foomodule.py:
def foo():
raise ValueError, "Don't call me during testing!"
Run Code Online (Sandbox Code Playgroud)
这失败了。
如果我将 import 更改为import foomodule 并在各处使用foomodule.foo那么它就可以工作。
但是对于通过上述方式导入的模拟函数有什么解决方案吗?
您刚刚遇到了最好不要从“内部”模块导入对象的众多原因之一——仅导入模块本身(可能来自包内)。我们已将此规则纳入 Google 风格指南(在此处发布),并且我衷心向每位 Python 程序员推荐它。
话虽这么说,您需要做的就是获取刚刚用模拟替换的 foomodule.foo 并将其粘贴到当前模块中。我不记得足够的 doctest 内部来确认是否
>>> import foomodule
>>> foo = foomodule.foo
Run Code Online (Sandbox Code Playgroud)
就足够了——尝试一下,如果不起作用,就改做
>>> import foomodule
>>> import sys
>>> sys.modules[__name__].foo = foomodule.foo
Run Code Online (Sandbox Code Playgroud)
是的,这是一团糟,但造成这种混乱的原因是看起来天真无邪的from foomodule import foo
——避免这种情况,你的生活会更简单、更有成效;-)。
归档时间: |
|
查看次数: |
1523 次 |
最近记录: |