Unit testing 使用每个测试的不同依赖项覆盖测试的FastAPI依赖项的最佳方法
根据FastAPI,覆盖测试依赖项的推荐方法是在运行所有测试之前全局执行:Unit testing 使用每个测试的不同依赖项覆盖测试的FastAPI依赖项的最佳方法,unit-testing,dependency-injection,overriding,pytest,fastapi,Unit Testing,Dependency Injection,Overriding,Pytest,Fastapi,根据FastAPI,覆盖测试依赖项的推荐方法是在运行所有测试之前全局执行: async def override_dependency(q: Optional[str] = None): return {"q": q, "skip": 5, "limit": 10} app.dependency_overrides[common_parameters] = override_dependency
async def override_dependency(q: Optional[str] = None):
return {"q": q, "skip": 5, "limit": 10}
app.dependency_overrides[common_parameters] = override_dependency
def test_override_in_items():
response = client.get("/items/")
assert response.status_code == 200
assert response.json() == {
"message": "Hello Items!",
"params": {"q": None, "skip": 5, "limit": 10},
}
def test_override_in_items_with_q():
response = client.get("/items/?q=foo")
assert response.status_code == 200
assert response.json() == {
"message": "Hello Items!",
"params": {"q": "foo", "skip": 5, "limit": 10},
}
但这允许您在整个测试运行中只覆盖依赖项一次。如果我需要对每个测试有不同的依赖关系,该怎么办?覆盖测试主体内部的依赖项并在测试完成后重置它们是否安全?像这样
def test_override_in_items():
app.dependency_overrides[common_parameters] = override_dependency
response = client.get("/items/")
assert response.status_code == 200
assert response.json() == {
"message": "Hello Items!",
"params": {"q": None, "skip": 5, "limit": 10},
}
app.dependency_overrides[common_parameters] = {}
像上面的例子那样做有什么缺点?您可以通过将app.dependency\u覆盖设置为空
dict:
app.dependency_overrides = {}
您可以通过将app.dependency\u覆盖设置为空
dict:
app.dependency_overrides = {}
这样做很危险。这将破坏其他组件可能设置的其他依赖项覆盖。这样做很危险。这将破坏其他组件可能设置的其他依赖项覆盖