exec python 脚本和模拟缺失模块
exec python script and mock missing modules
我是 运行 python 脚本上的 execfile() 但在这个脚本中有对我没有的模块的调用。因此,我想用 fakeObject/mock
替换它们
我有这个指令:
import mymodule.mtest.core as CCORE
API = CCORE.object()
API.initialize(sys.argv, comm=comm)
但是我没有mymodule.mtest.core,我想用一个假对象替换CCORE.object()
包含 initialize() 方法
我试过这样的:
sys.modules['mymodule'] = MyfakeObj
MyFakeObj 是一个带有假 def initialiaze() 方法的 python 模块
但是我有这个错误
ModuleNotFoundError: No module named 'mymodule.mtest'; 'mymodule' is not a
package
我该怎么做?
您可以使用 unittest.mock
patch/mock 个对象。但是因为 unittest
是为了测试目的而创建的,我真的不确定你是否应该使用它。
from unittest.mock import Mock, patch
with patch("mymodule.mtest.core"):
execfile() # What you want to run
如果您想从 mymodule.mtest.core
属性或方法中获取自定义值:
from unittest.mock import Mock, patch
with patch("mymodule.mtest.core") as mocked_function:
mocked_function = Mock()
mocked_function.some_attribute= "something"
mocked_function.some_method = Mock(return_value="something")
execfile() # What you want to run
感谢您的帮助。我测试了你的建议,但在我的上下文中,说明
ith patch.object(mymodule.mtest.core, "object", return_value=Mock()):
不起作用,
另一方面,它让我走上了使用 Mock()
的轨道
我是这样使用的:
sys.modules['mymodule'] = MagicMock()
sys.modules['mymodule.mtest'] = MagicMock()
sys.modules['mymodule.mtest.core'] = MagicMock()
我可以按照说明执行我的脚本
import mymodule.mtest.core
导入不再崩溃
我是 运行 python 脚本上的 execfile() 但在这个脚本中有对我没有的模块的调用。因此,我想用 fakeObject/mock
替换它们我有这个指令:
import mymodule.mtest.core as CCORE
API = CCORE.object()
API.initialize(sys.argv, comm=comm)
但是我没有mymodule.mtest.core,我想用一个假对象替换CCORE.object() 包含 initialize() 方法
我试过这样的:
sys.modules['mymodule'] = MyfakeObj
MyFakeObj 是一个带有假 def initialiaze() 方法的 python 模块
但是我有这个错误
ModuleNotFoundError: No module named 'mymodule.mtest'; 'mymodule' is not a package
我该怎么做?
您可以使用 unittest.mock
patch/mock 个对象。但是因为 unittest
是为了测试目的而创建的,我真的不确定你是否应该使用它。
from unittest.mock import Mock, patch
with patch("mymodule.mtest.core"):
execfile() # What you want to run
如果您想从 mymodule.mtest.core
属性或方法中获取自定义值:
from unittest.mock import Mock, patch
with patch("mymodule.mtest.core") as mocked_function:
mocked_function = Mock()
mocked_function.some_attribute= "something"
mocked_function.some_method = Mock(return_value="something")
execfile() # What you want to run
感谢您的帮助。我测试了你的建议,但在我的上下文中,说明
ith patch.object(mymodule.mtest.core, "object", return_value=Mock()):
不起作用,
另一方面,它让我走上了使用 Mock()
的轨道我是这样使用的:
sys.modules['mymodule'] = MagicMock()
sys.modules['mymodule.mtest'] = MagicMock()
sys.modules['mymodule.mtest.core'] = MagicMock()
我可以按照说明执行我的脚本
import mymodule.mtest.core
导入不再崩溃