python – 如何模拟从函数导入但在sys.path中不存在的模块?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何模拟从函数导入但在sys.path中不存在的模块?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1350字,纯文字阅读大概需要2分钟。
内容图文
![python – 如何模拟从函数导入但在sys.path中不存在的模块?](/upload/InfoBanner/zyjiaocheng/806/992d9babab9f40bfa7220bc49b90f9db.jpg)
参见英文答案 > python: mock a module 4个
我正在对包含执行本地导入的方法的代码进行单元测试.
def function_under_test():
import unknown.dependency
(我没有在.py文件的顶部使用导入,因为在调用该函数时它可能存在也可能不存在.)
以通常的方式模拟unknown.dependency只有在sys.path中可以找到它时才有效.否则,对补丁的调用失败(它拒绝模拟它看不到的东西):
with mock.patch('unknown.dependency'):
function_under_test()
>>> ImportError: No module named 'unknown'
文档建议我应该修补使用模块的命名空间 – 在本例中为function_under_test.但是,当该命名空间是一个函数时,这不会削减它.对补丁的调用成功,但实际的import语句仍然引用原始的,不存在的未知模块,该模块无法找到.
with mock.patch('method_under_test.unknown'):
print("fails")
>>> ImportError: No module named 'unknown'
那么,如果模块本身不存在并且从函数导入,如何用模拟替换依赖模块呢?
解决方法:
只模拟导入
简单的方法是将import语句移动到单独的函数中.
def get_dependency():
import unknown.dependency
return unknown.dependency
def function_under_test():
module = get_dependency()
# use module
这样可以很容易地模拟出“帮助”功能.这样做的缺点是需要更改被测代码.它确实有效:
with mock.patch('get_dependency'):
function_under_test()
模拟模块
如here所述,您可以将模拟模块直接添加到sys.modules,以便Python可以找到它,无论它是否存在于sys.path中.
with mock.patch.dict('sys.modules', unknown=mock.MagicMock()):
function_under_test()
内容总结
以上是互联网集市为您收集整理的python – 如何模拟从函数导入但在sys.path中不存在的模块?全部内容,希望文章能够帮你解决python – 如何模拟从函数导入但在sys.path中不存在的模块?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。