【问题标题】:Mock never called模拟从未调用
【发布时间】:2013-06-04 07:07:13
【问题描述】:

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

tests.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)

models.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...

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

【问题讨论】:

    标签: python django unit-testing mocking python-mock


    【解决方案1】:

    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 文档。

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2019-07-22
      • 2021-08-31
      相关资源
      最近更新 更多