Skip to main content
 首页 » 编程设计

python之模拟从未打电话

2025年05月04日11bhlsheji

我试图在我的单元测试中实现模拟,但它从未被调用,尽管它应该被调用。

测试.py

from mock import patch 
 
class MyTest(TestCase): 
    def test_add(self): 
        name = 'Test' 
 
        with patch('my_module.my_file.my_function') as add_method: 
            m = MyModel(name=name) 
            m.save() 
 
        add_method.assert_called_with(name=name) 

模型.py

from my_module.my_file import my_function 
 
class MyModel(Model): 
    name = CharField(max_length=12) 
 
    def save(self, *args, **kwargs): 
        my_function(self.name) 
 
        super(MyModel, self).save(*args, **kwargs) 

我的文件.py

def my_function(name): 
    # Processing... 

当我运行单元测试时,它只是告诉我模拟还没有被调用,虽然它应该被调用,但我知道脚本工作正常。你对我有什么想法/建议吗?

请您参考如下方法:

导入 models 时,它运行 from my_module.my_file import my_function,这还没有模拟。当您运行测试用例时,models 模块中的 my_function 名称已经绑定(bind)到真实 函数:修补 my_files 无效。

您需要修补 models.my_function:

with patch('models.my_function') as add_method: 
    m = MyModel(name=name) 
    m.save() 

另一种方法是在 models 导入时修补 my_file.my_function。

参见 where to patch文档。