>> from -6ren">
gpt4 book ai didi

python - 在 doctest (python) 中模拟 Y of (from X import Y)

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:34 25 4
gpt4 key购买 nike

我正在尝试创建一个带有驻留在单独模块中的函数模拟的 doctest并且如下所示导入

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!"

这失败了。

如果我将导入更改为 import foomodule并在任何地方使用 foomodule.foo然后就可以了。

但是对于上面的方法导入的mocking函数有什么解决方案吗?

最佳答案

您刚刚遇到了最好永远不要从“模块内”导入对象的众多原因之一——只导入模块本身(可能从包内)。我们已将此规则作为 Google 风格指南的一部分(已发布 here ),我衷心向每位 Python 程序员推荐它。

话虽这么说,您需要做的是将刚刚替换为模拟的 foomodule.foo 放入当前模块中。我不记得足够多的 doctest 内部来确认是否

   >>> import foomodule
>>> foo = foomodule.foo

就够了——试一试,如果不行,就改行

   >>> import foomodule
>>> import sys
>>> sys.modules[__name__].foo = foomodule.foo

是的,这是一团糟,但造成这团糟的原因是看似无辜的 from foomodule import foo —— 避开它,你的生活会更简单、更有成效;-)。

关于python - 在 doctest (python) 中模拟 Y of (from X import Y),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2216828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com