gpt4 book ai didi

python - Pytest 补丁字段的继承 django 模型的默认属性

转载 作者:行者123 更新时间:2023-12-04 16:45:40 33 4
gpt4 key购买 nike

我在 common/models.py 中有以下模型:

from django.db import models
from uuid import uuid4

class BaseModel(models.Model):
guid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)

class Meta:
abstract = True
在 app/models.py 我有以下内容:
from django.db import models
from common.models import BaseModel

class Entity(BaseModel):
name = models.CharField()
在测试中,我试图修补 uuid4通过以下方式:
def test_model_create(mocker):
# Given
mock_guid = mocker.patch("uuid.uuid4", return_value="some-guid")

# When
entity = Entity.objects.create(name="test_name")

# Then
mock_guid.assert_called_once()
assert "some-guid" == entity.guid
mock_guid.assert_called_once()返回未调用。这里有什么问题?

最佳答案

我认为问题在于guid = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)引用 uuid.uuid4在解析时直接运行。当您设置模拟时,替换此指针为时已晚。
将其更改为类似 guid = models.UUIDField(unique=True, default=lambda: uuid.uuid4(), editable=False) 的内容应该解决您的问题,因为该值是在运行时返回的,并且您的模拟将在引用和调用该函数之前正确设置。

关于python - Pytest 补丁字段的继承 django 模型的默认属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69517711/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com