嘲笑从未被召唤

2024-03-29 02:08:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的单元测试中实现一个mock,但它从未被调用,即使它应该被调用。你知道吗

你知道吗测试.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...

当我运行单元测试时,它只是告诉我没有调用mock,虽然应该是这样,但我知道脚本运行得很好。你有什么想法/建议给我吗?你知道吗


Tags: namefrompyimportselfaddmysave
1条回答
网友
1楼 · 发布于 2024-03-29 02:08:59

导入models时,它运行from my_module.my_file import my_function,这还没有模拟。运行测试用例时,models模块中的my_function名称已经绑定到real函数:修补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文档。你知道吗

相关问题 更多 >