Script Valley
FastAPI: Build Production Python APIs
Testing FastAPI ApplicationsLesson 5.2

How to override FastAPI dependencies in tests

app.dependency_overrides, test database, override get_db, override get_current_user, test isolation, restoring overrides, in-memory SQLite for tests

Overriding Dependencies in Tests

app.dependency_overrides is a dict that maps production dependencies to test replacements. It is the primary tool for isolating tests from real databases and auth systems.

Override get_db with an in-memory SQLite

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from fastapi.testclient import TestClient
from app.main import app
from app.dependencies import get_db
from app.database import Base

TEST_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(TEST_DATABASE_URL)
TestingSession = sessionmaker(bind=engine)

Base.metadata.create_all(bind=engine)

def override_get_db():
    db = TestingSession()
    try:
        yield db
    finally:
        db.close()

app.dependency_overrides[get_db] = override_get_db
client = TestClient(app)

Override auth dependency

from app.dependencies import get_current_user
from app.schemas import User

def fake_user():
    return User(id=1, email="test@test.com")

def test_protected_route():
    app.dependency_overrides[get_current_user] = fake_user
    response = client.get("/me")
    assert response.status_code == 200
    app.dependency_overrides.clear()  # always clean up

Always clear overrides after a test or use a pytest fixture with teardown. Leaving overrides in place pollutes other tests.

Up next

How to write tests for authenticated FastAPI routes

Sign in to track progress