在python中模拟子模块

里克

我试图通过狮身人面像生成项目的自动文档。但是,我将在没有要导入的所有模块的环境中运行自动文档的生成。因此,我想模拟导入语句。

http://read-the-docs.readthedocs.io/en/latest/faq.html上,我发现了C模块的这一技巧:

import sys
from unittest.mock import MagicMock

class Mock(MagicMock):
    @classmethod
    def __getattr__(cls, name):
        return Mock()

MOCK_MODULES = ['pygtk', 'gtk', 'gobject', 'argparse', 'numpy', 'pandas']
sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES)

但是,模拟getattr不能解决以下情况:

from foo.bar import blah

也就是说,在导入语句中包含点[。]时。

有人知道如何模拟我所有的导入内容以获取特定的模块列表吗?

马丁·彼得斯(Martijn Pieters)

进口

from foo.bar import blah

会寻找sys.modules['foo.bar']只需插入:

>>> from foo.bar import blah
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'foo'
>>> import sys
>>> from unittest import mock
>>> sys.modules['foo.bar'] = mock.Mock()
>>> from foo.bar import blah
>>> blah
<Mock name='mock.blah' id='4362289896'>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章