Performance: Overriding dependencies in tests
This affects the speed and reliability of test execution by controlling dependency injection without impacting the main app runtime performance.
from fastapi.testclient import TestClient with TestClient(app) as client: app.dependency_overrides[get_db] = override_get_db response = client.get('/items/1') assert response.status_code == 200 app.dependency_overrides.clear() # Clean up after test
app.dependency_overrides = {}
def test_read_item():
# Directly patching global dependencies without cleanup
app.dependency_overrides[get_db] = override_get_db
response = client.get('/items/1')
assert response.status_code == 200
# No cleanup leads to side effects in other tests| Pattern | App Context Rebuilds | Test Isolation | Resource Usage | Verdict |
|---|---|---|---|---|
| Global overrides without cleanup | Multiple per test suite | Poor - side effects possible | High - memory leaks risk | [X] Bad |
| Scoped overrides with cleanup | Single per test | Good - isolated tests | Low - efficient resource use | [OK] Good |
from fastapi import FastAPI, Depends
from fastapi.testclient import TestClient
app = FastAPI()
def get_number():
return 10
@app.get("/number")
def read_number(num: int = Depends(get_number)):
return {"number": num}
def override_get_number():
return 42
app.dependency_overrides[get_number] = override_get_number
client = TestClient(app)
response = client.get("/number")
print(response.json())app.dependency_overrides[get_data] = override_get_data # test code runs here app.dependency_overrides.clear()Error: KeyError during test execution.
Pass the test and this pattern moves unknown