📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials FastAPI FastAPI Testing Advanced

FastAPI Testing Advanced

5 min read Quiz at the end
Override FastAPI dependencies in tests to use in-memory SQLite instead of the real database.

Advanced FastAPI Testing

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

engine = create_engine("sqlite:///./test.db",
    connect_args={"check_same_thread": False})
TestSession = sessionmaker(bind=engine)

@pytest.fixture(autouse=True)
def setup_db():
    Base.metadata.create_all(bind=engine)
    yield
    Base.metadata.drop_all(bind=engine)

@pytest.fixture
def client():
    session = TestSession()
    app.dependency_overrides[get_db] = lambda: session
    with TestClient(app) as c: yield c
    app.dependency_overrides.clear()
    session.close()

def test_create_user(client):
    resp = client.post("/users",
        json={"name":"Alice",
              "email":"a@test.com",
              "password":"Secret1!"})
    assert resp.status_code == 201

def test_missing_user(client):
    assert client.get("/users/99999").status_code == 404