首页 > 解决方案 > 模拟一个从 ... import 中幸存的包

问题描述

在一个测试用例中,我想keras在我不知道用户将如何导入该包的地方模拟包。这意味着我需要支持

import keras
from keras import something
from keras.backend import otherthings
from keras.sub.subsub....module  import somethingelse

我尝试使用一个Mock对象来执行以下操作:

from unittest.mock import Mock
m = Mock()
sys.modules['keras'] = m

import keras                # Success
from keras import backend   # Success
from keras.backend import a # Failed: ModuleNotFoundError: No module named 'keras.backend'; 'keras' is not a package

我当然可以添加一行

sys.modules['keras.backend'] = m

绕过这个错误,但我不知道用户明天是否想要另一个模块 - 我只需要添加模块列表,这似乎不是一个好的选择。

有什么方法可以递归地模拟这个模块吗?

标签: pythonunit-testingmocking

解决方案


推荐阅读