python - 如何模拟导入

标签 python mocking python-import

模块 A 在其顶部包含 import B。但是在测试条件下我想mock A 中的 B(模拟 A.B)并完全避免导入 B

其实B并不是故意安装在测试环境中的。

A 是被测单元。我必须导入 A 及其所有功能。 B 是我需要模拟的模块。但是,如果第一件事 A 是 import B?

(未安装B的原因是我使用pypy进行快速测试,不幸的是B还与pypy不兼容。)

这是怎么做到的?

最佳答案

您可以在导入 A 之前分配给 sys.modules['B'] 以获得您想要的:

test.py:

import sys
sys.modules['B'] = __import__('mock_B')
import A

print(A.B.__name__)

A.py:

import B

注意 B.py 不存在,但是运行 test.py 时不会返回错误并且 print(A.B.__name__) 打印 mock_B .您仍然需要创建一个 mock_B.py 来模拟 B 的实际函数/变量/等。或者你可以直接分配一个 Mock() :

test.py:

import sys
sys.modules['B'] = Mock()
import A

关于python - 如何模拟导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658043/

相关文章:

python - 我是否必须在 python 中重新加载模块才能捕获更改?

python - 错误地连接 Pandas 中的列

python - 如何使用元组打印此图案?

python - 如何为 django-rest-framework api 编写单元测试?

python - 在函数内部导入库的优势?

python - 在 Windows 7 中导入 pymssql Unicode 解码错误

python - 使用空白电子邮件添加多个 Django 用户

python - load_data() 在 PC (Windows 10) 上的哪个文件夹中保存 Keras 中的数据集?

javascript - 如何对需要其他模块的 Node.js 模块进行单元测试以及如何模拟全局 require 函数?

c++ - 设计调用外部API的类时测试实现是否正确?