dgi*_*rdi 5 testing django nosetests python-mock
我正在使用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):
...
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用,我相信原因是在运行任何测试代码之前FileField取消了upload_path的引用,因此现在修补补丁太晚了。
如何让测试代码更改“ upload_to”是什么?失败了,模型如何检查是否正在通过测试运行?
我想你已经差不多了,但是为了获得你想要的后期评估,你需要将 file_path 作为你想要修补的变量放入,然后使用 lambda 来延迟绑定:
#models.py
upload_path = 'files'
class Model(models.Model):
file = models.FileField(upload_to=lambda x,y: upload_path)
#tests.py
@mock.patch('models.upload_path', 'files/test')
class ModelTest(object):
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |