【发布时间】:2019-10-10 10:27:00
【问题描述】:
我有一个带有 uuid 字段的模型,该字段具有默认值作为函数。
from uuid import uuid4
def _new_uid():
return uuid4()
class A(models.Model):
name = models.CharField()
uid = models.UUIDField(unique=True, default=_new_uid, editable=False)
在测试中我想修补 _new_uid 方法返回 11111111-1111-1111-1111-111111111111。
@patch('module.foo._new_uid',
Mock(return_value='11111111-1111-1111-1111-111111111111'))
def test_create_A():
response = api_client.post('/api/a-list/', {
'name': 'test',
})
assert response.json() == {
'_uid': '11111111-1111-1111-1111-111111111111',
'name': 'test'
}
但它仍然返回一些随机的 uuid。我想这是因为模型初始化在测试开始运行之前就已经结束了。
我可以通过将默认选项更改为:
uid = models.UUIDField(unique=True, default=lambda: _new_uid(), editable=False)
不把default改成lambda调用可以吗?
【问题讨论】:
-
_new_uid和A在文件module.foo.py中吗? -
@DipenDadhaniya 是的
标签: python django django-models python-unittest