我在基于FastAPI的项目中使用Pydantic设置管理。我有一个像下面这样的Settings
类:
class Settings(BaseSettings):
FOO: str = ''
BAR: int = 0
class Config:
env_file = "path/to/.my_env_file")
env_nested_delimiter = "__"
path/to/.my_env_file
文件包含了 FOO
和 BAR
值。
在测试期间,我需要有选择性地对 Settings
进行补丁操作,并且不想从 path/to/.my_env_file
中读取任何内容。例如:
path/to/.my_env_file
FOO=i_do_not_wanna_read_this
BAR=100
我的测试文件:
@lru_cache()
def get_settings():
return Settings()
def get_settings_override() -> Settings:
return Settings(
FOO = 'foo'
)
app.dependency_overrides[get_settings] = get_settings_override
我想要运行测试,其中一个测试参数为
FOO='foo'
,另一个测试参数为默认值的BAR=0
(忽略path/to/.my_env_file
文件内的内容)。在上述代码中,我成功得到了FOO='foo'
,但是BAR
仍从path/to/.my_env_file
中读取(即,BAR=100
)。是否有一种简单明了的方法来处理这个问题?
def pytest_configure(): Settings.Config.env_file = ''
解决了我的测试套件问题。非常感谢你的分享! - hoefling