我发现自己为两个类的方法编写测试,其中一个类具有str字段,它从另一个BaseModel类检索:
class Person(BaseModel):
firstname: Optional[str] = settings.get_settings().firstname
lastname: Optional[str] = settings.get_settings().lastname
现在,当我尝试创建夹具时,我遇到了这个问题
#test file
@pytest.fixture
def person_class():
person = Person(
firstname="Marco",
lastname="Marche"
)
return person()
错误:pydantic.error_wrappers.ValidationError: 31 validation errors for Settings
Settings是一个basessettings类。
class Settings(BaseSettings):
firstname: str,
lastname: str,
address: str,
telephone: str
@lru_cache
def get_settings() -> Settings:
return Settings()
如何通过创建一个"fake"由我输入字段的人员类?
我假设您在Settings
定义中有一个错别字,并且在firstname
,lastname
和address
行中应该没有逗号。
你得到的错误很可能是因为你的Settings
类需要firstname
,lastname
和其他字段的值,但你没有提供任何。
我认为最简单的解决方案是在get_settings()
函数的实例化中给它一些假值,例如:
@lru_cache
def get_settings() -> Settings:
return Settings(
firstname="fake firstname",
lastname="fake lastname",
address="fake address",
telephone="fake telephone",
)
Pydantic确实在模型上提供了construct()
方法,允许在没有验证的情况下创建模型,但是,我认为这不会在您的情况下起作用,因为您从Settings
中获得Person
的默认值,在像您这样的情况下,仍在评估中。