我试图在我的单元测试中实现模拟,但它从未被调用,尽管它应该被调用。
测试.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文档。
