我正在尝试模拟一个类,该类在导入要测试的所述类的模块中调用。
# application.py
from my_module.my_submodule import MyClass
def my_function(var1):
instance = MyClass()
instance.some_function(var1)
和我的测试文件
# test_application.py
import mock
import application
def test_my_function():
with mock.patch('my_module.my_submodule.MyClass') as MockClass:
application.my_function(var1)
MockClass.assert_called()
这会导致错误,提示未调用MockClass
。
现在,通过查看以下问题:Why python mock patch doesn't work?,我得到了启发,将application.py
导入更改为此
# application.py
import my_module.my_submodule as mysub
def my_function(var1):
instance = mysub.MyClass()
instance.some_function(var1)
也就是说,我不会直接导入要在测试中模拟的类。现在可以了。
我的问题是,这是否按预期工作,或者我以原始方式做错了什么?如果我想模拟要测试的模块中使用的类,是否真的有必要总是这样导入模块?
答案 0 :(得分:1)
是的,它按预期工作,但是您修补了错误的目标。
尝试修补application.MyClass
。
application
不在任何地方使用my_module.my_submodule.MyClass
,
但是使用MyClass
别名。