我正在为带有 FileField 的 Django 模型编写测试用例。我想更改上传路径以防止测试对系统的其余部分产生副作用。
我尝试将可调用传递给 upload_to 并在测试中对其进行修补:
#models.py
upload_path = lambda x, y: 'files'
class Model(models.Model):
file = models.FileField(upload_to=upload_path)
#tests.py
test_path = mock.Mock()
test_path.return_value = 'files/test'
@mock.patch('models.upload_path', new=test_path)
class ModelTest(object):
...
然而,这似乎不起作用,我相信原因是在任何测试代码运行之前,upload_path 被 FileField 取消引用,所以现在修补东西为时已晚。
如何让测试代码更改 upload_to 是什么?如果做不到这一点,模型如何检查它是否正在通过测试运行?