我试图在我的单元测试中实现一个模拟,但它永远不会被调用,即使它应该。
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)
my_file.py
def my_function(name):
# Processing...
当我运行单元测试时,它只是告诉我模拟没有被调用,虽然它应该是,我知道脚本工作正常。你对我有什么想法/建议吗?
答案 0 :(得分:1)
导入models
时,它会运行from my_module.my_file import my_function
,但尚未模拟。运行测试用例时,my_function
模块中的models
名称已绑定到 real 函数:修补my_files
无效。
您需要修补models.my_function
:
with patch('models.my_function') as add_method:
m = MyModel(name=name)
m.save()
另一种方法是在my_file.my_function
导入时修补models
。
请参阅where to patch文档。