Код: Выделить всё
from pydantic import BaseModel
class Book(BaseModel):
name: str
description: str = Field(min_length=1, max_length=64, pattern="^[a-z]+$")
Чтобы внести ясность: я доверяю pydantic, чтобы правильно проверить, что такое определены, я не доверяю ни себе, ни моим коллегам, что они всегда правильно определят ограничения модели, которые являются нашими бизнес-требованиями.
Чтобы проверить эти ограничения/требования, я испытываю желание создать экземпляры модель с неверными значениями, затем поймайте ValidationError, затем проверьте содержимое ошибки, чтобы убедиться, что это ожидаемая ошибка.
Что-то вроде:
Код: Выделить всё
def test_book__error_invalid_description():
with pytest.raise(ValidationError) as err:
Book(name="toto", description="123")
assert "pattern_error" in err.value.errors # not working, that's just the idea
Я бы предпочел проверить наличие сами ограничения, но я не могу найти понятный и лаконичный способ сделать это.
Вот что я пробовал:
Код: Выделить всё
from annotated_types import MinLen, MaxLen
def test_book__validation_constraints():
assert Book.model_fields["name"].is_required()
assert MinLen(1) in Book.model_fields["description"].metadata
assert MaxLen(64) in Book.model_fields["description"].metadata
assert # no idea how to assert pattern
Считаете ли вы, что проверять такого рода требования излишне?
Подробнее здесь: https://stackoverflow.com/questions/790 ... tic-models
Мобильная версия