gpt4 book ai didi

python - 如何模拟在单独命名空间中使用的类?

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

包结构:

pqr/pq.py
test.py

pqr/pq.py 具有以下结构

其中lmn是全局安装的pip模块

pq.py的结构

from lmn import Lm

class Ab():

def __init__(self):
self.lm = Lm()

def echo(self, msg):
print msg

test.py 具有以下结构

from pqr.pq import Ab

如何在此处模拟 Lm() 类以便测试 Ab 类中的所有方法?

最佳答案

Lm 来自哪里并不重要。您将 Lm 作为全局 there 导入到 pqr.pq 命名空间中,因此您只能在那里替换该名称,而不是其他任何地方。这是因为 Ab.__init__ 方法会在它自己的模块中“本地”查找它。

所以使用 mock library您需要做的就是修补名称 pqr.pq.Lm:

import mock
from pqr.pq import Ab

with mock.patch('pqr.pq.Lm') as mock_lm:
# within this block, `Lm` in the `pqr.pq` namespace has been replaced
# by a mock object
test_instance = Ab()
# assert that the patch succeeded; .return_value is used because
# Ab.__init__ *calls* Lm()
assert test_instance.lm is mock_lm.return_value

另见 Where to patch section mock 文档。

关于python - 如何模拟在单独命名空间中使用的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39543335/

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