在 Python 中模拟导入的类

卡斯帕·H

我正在尝试模拟一个在导入所述类的模块中调用的类,我想测试该类。

# 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没有被调用。

现在,通过查看这个问题:为什么 python 模拟补丁不起作用?,我受到启发将application.py导入更改为此

# application.py
import my_module.my_submodule as mysub

def my_function(var1):
    instance = mysub.MyClass()

    instance.some_function(var1)

也就是说,我不直接导入我想在测试中模拟的类。现在它起作用了。

我的问题是,如果这按预期工作,或者我以原始方式做错了什么?如果我想模拟我想测试的模块中使用的类,是否真的有必要总是像这样导入模块?

程序设计

是的,它按预期工作,但您修补了错误的目标。尝试修补application.MyClass

application不在my_module.my_submodule.MyClass任何地方使用,而是使用MyClass别名。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章