Python单元测试:模拟另一个模块中有问题的模块/函数

Python单元测试:模拟另一个模块中有问题的模块/函数,python,mocking,python-unittest,Python,Mocking,Python Unittest,B/moduleB.py定义为: def text_函数(): 上升键错误 text_函数() ModuleA.py定义为: 来自B.moduleB导入文本功能 类别a(): 定义初始化(自): self.text='abc' def mul(自身、a、b): 打印(text_函数()+str(a*b)) 如果名称=“\uuuuu main\uuuuuuuu”: rom=a() rom.mul(2,3) 这是单元测试测试模块.py: 来自unittest.mock导入MagicMock,修补

B/moduleB.py
定义为:

def text_函数():
上升键错误
text_函数()
ModuleA.py
定义为:

来自B.moduleB导入文本功能
类别a():
定义初始化(自):
self.text='abc'
def mul(自身、a、b):
打印(text_函数()+str(a*b))
如果名称=“\uuuuu main\uuuuuuuu”:
rom=a()
rom.mul(2,3)
这是单元测试
测试模块.py

来自unittest.mock导入MagicMock,修补程序
从模块a导入a
类TestmoduleA(unittest.TestCase):
def设置(自):
通过
def测试模块(自身):
印刷品(a.mul)
self.assertTrue(True)
现在,有没有一种方法可以在从moduleA导入时模拟B/moduleB.py中的text_函数,这样我就不会得到
键错误

基本上,我不想在测试moduleA时从moduleB运行任何东西


提前感谢:)

您的主要问题是导入模块时已调用有问题的函数,因此您无法修补该函数(因为修补将导入原始模块并调用该函数)。在这种情况下,您必须在导入测试模块之前模拟导入本身:

导入单元测试
从unittest导入模拟
导入系统
sys.modules['B.moduleB']=mock.mock()
从模块a导入a
类TestmoduleA(unittest.TestCase):
def测试模块(自身):
印刷品(a.mul)
self.assertTrue(True)
有关更多信息,请参见