当前位置: 首页 > 面试题库 >

如何模拟导入

太叔炎彬
2023-03-14
问题内容

模块A包括import B在其顶部。然而在试验条件下,我想嘲笑
BA(模拟A.B)和进口完全避免B

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

A是被测单元。我必须导入A所有功能。B是我需要模拟的模块。但我怎么能嘲笑B之内A,并停止A从导入实际B,如果第一件事情A确实是进口B

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

怎么办呢?


问题答案:

您可以sys.modules['B']在导入之前分配给以A获取所需的内容:

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__)print
mock_B。您仍然必须mock_B.py在模拟B实际功能/变量/等的地方创建一个。或者,您可以直接分配一个Mock()

test.py

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


 类似资料:
  • 问题内容: 我开始认为这是不可能的,但是无论如何我都想问。 我想测试我的一个ES6模块以特定方式调用另一个ES6模块。有了茉莉花,这非常容易- 应用程式码: 和测试代码: 笑话相当于什么?我觉得这是一件很想做的简单的事,但是我一直在努力尝试弄清头发。 我最接近的是将s 替换为s,并将其移入测试/函数中。都不是我想做的事情。 为了获得加分,我希望在其中的功能为默认导出时使整个工作正常进行。但是,我知

  • 我对如何对实现进行单元测试的笑话感到困惑。问题是我想模仿不同的预期行为。 有没有办法做到这一点?由于导入只能位于文件的顶部,并且为了能够模拟某些内容,必须在导入之前声明它。我还尝试传递一个本地函数,以便覆盖行为,但jest抱怨不允许传递任何本地函数。 就像你想象的使用

  • null 如上所示,它导出了一些命名函数,而且重要的是 使用了 。 开玩笑地说,当我为 编写单元测试时,我希望模拟 函数,因为我不希望 中的错误影响我为 编写的单元测试。我的问题是我不确定最好的方法是: 如有任何帮助/洞察力,我们将不胜感激。

  • 问题内容: 是否可以使用列表理解来模拟类似sum()的东西? 例如-我需要计算列表中所有元素的乘积: 相同的代码: 问题答案: 没有; 列表理解会生成一个与其输入一样长的列表。您将需要Python的其他功能工具之一(在本例中为特定情况)将序列折叠为单个值。

  • CacheController.Somemethod();但是当submit方法被称为submit方法时,它会创建一个线程和cacheController.somemethod();从不调用测试类。

  • 当我运行测试时,我可以做什么来更改时间