gpt4 book ai didi

python - 在 Python 中模拟修补 from/import 语句

转载 作者:IT老高 更新时间:2023-10-28 22:24:47 27 4
gpt4 key购买 nike

我正在尝试让 mock.patch 处理以下示例代码:

from mock import patch
from collections import defaultdict

with patch('collections.defaultdict'):
d = defaultdict()
print 'd:', d

这会输出以下内容:

d: defaultdict(None, {})

这意味着 defaultdict 没有被修补。

如果我用直接导入语句替换 from/import 语句,它会起作用:

from mock import patch
import collections

with patch('collections.defaultdict'):
d = collections.defaultdict()
print 'd:', d

输出是:

d: <MagicMock name='defaultdict()' id='139953944084176'>

有没有办法使用 from/import 修补调用?

谢谢

最佳答案

如果你在同一个模块中打补丁,你可以使用 __main__:

from mock import patch
from collections import defaultdict

with patch('__main__.defaultdict'):
d = defaultdict()
print 'd:', d

但是,如果您要为导入的模块模拟​​某些内容,则需要使用该模块的名称,以便修补正确的引用(或名称):

# foo.py

from collections import defaultdict

def bar():
return defaultdict()


# foo_test.py

from mock import patch
from foo import bar

with patch('foo.defaultdict'):
print bar()

这里的重点是补丁想要它正在修补的东西的完整路径。在当前模块中修补某些内容时,这看起来有点奇怪,因为人们不经常使用 __main__ (或者必须引用当前模块)。

关于python - 在 Python 中模拟修补 from/import 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351382/

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