模拟模块的方式

你好小伙子

我正在使用模拟1.0.1。我几乎找到了模拟一切的方法。这是一个强大的工具。

我所有的配置都在一个名为algo_config的模块中。

结构大致如下:

--text
----algo_config

我试过了

with patch('text.algo_config') as Mockconfig:
    ....

但这给了我一个错误,说基本上文本模块没有属性algo_config,似乎无法以这种方式模拟模块。

有什么方法可以直接模拟一个模块,而不是一个个地模拟每个属性和函数,类?

乔根·舍费尔(JorgenSchäfer)

问题的核心在于,修补程序会覆盖名称,而不是值。如果有一个模块import text.algo_config,则它现在有一个本地名称text.algo_config,该名称指向该模块,但与其他模块中使用的名称完全无关。他们只是命名相同。(这就是import foo as bar起作用的原因–仅仅是名称。)修补对该模块的另一个引用不会影响此引用。

您有两个选择。修补模块引用,或者影响将来的导入。

您最可能需要的解决方案是前者。您没有修补模块,而是参考了您关心的模块。例如,假设您正在测试frobnicator.py该模块可以from text import algo_config然后,您可以使用with patch('frobnicator.algo_config') as algo_config,这将影响到所有使用algo_configfrobnicator

另外,您也可以将放入sys.modules,这会影响以后的 import语句。也就是说,任何已经运行的import语句都将导入旧值。并且在此修补程序存在期间运行的任何import语句都将导入模拟对象,但不会还原为实际模块。这是难以置信的善变,可能不是您想要的。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模拟的npm模块以开玩笑的方式返回空对象

来自分类Dev

如何在每个测试中以不同的方式模拟用户模块?

来自分类Dev

如何在Jest的同一测试文件中的不同测试中以不同的方式模拟模块?

来自分类Dev

模拟字典在模块级别

来自分类Dev

OCaml模拟模块生成

来自分类Dev

问题模拟节点模块

来自分类Dev

模拟补丁模块

来自分类Dev

模拟的创建方式

来自分类Dev

Python unittest模拟...模拟模块语句

来自分类Dev

如何使用Jest模拟模拟模块的方法?

来自分类Dev

Python unittest模拟...模拟模块语句

来自分类Dev

将模拟的模块还原回原始模块

来自分类Dev

在Python中从Boto模拟模块

来自分类Dev

其他模块的模拟功能

来自分类Dev

用Jest模拟jsonwebtoken模块

来自分类Dev

如何模拟axios配置模块?

来自分类Dev

在python中模拟子模块

来自分类Dev

使用 mockery 模拟 fs 模块

来自分类Dev

React 中的 Jest 模块模拟

来自分类Dev

Python:模拟引发异常的模块

来自分类Dev

在模拟模块时,Python模拟访问“真实”对象

来自分类Dev

将测试模拟数据注入量角器模拟模块

来自分类Dev

模拟Firebase模块后模拟Firebase auth方法的实现

来自分类Dev

如何在Jest的模拟模块中更改函数的模拟实现

来自分类Dev

在模拟模块时,Python模拟访问“真实”对象

来自分类Dev

Android:在设备上以编程方式模拟/模拟呼叫

来自分类Dev

在Node.js中模拟嵌套模块?

来自分类Dev

有Python的bisect模块的Go模拟吗?

来自分类Dev

Python:数组中使用的模拟补丁模块