2

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

测试.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...

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

4

1 回答 1

1

models被导入时,它运行,它还from my_module.my_file import my_function没有被模拟。当您运行测试用例时,模块中的my_function名称models已经绑定到真正的功能:补丁my_files没有效果。

你需要的是修补models.my_function

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

另一种方法是my_file.my_functionmodels导入时修补。

查看在哪里修补文档。

于 2013-06-04T07:10:27.743 回答