""" 测试配置 """ import pytest import asyncio from typing import AsyncGenerator from httpx import AsyncClient from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker from src.main import app from src.config.database import Base, get_db # 测试数据库URL TEST_DATABASE_URL = "sqlite+aiosqlite:///./test.db" # 创建测试引擎 test_engine = create_async_engine(TEST_DATABASE_URL, echo=False) TestSessionLocal = async_sessionmaker( test_engine, class_=AsyncSession, expire_on_commit=False ) @pytest.fixture(scope="session") def event_loop(): """创建事件循环""" loop = asyncio.get_event_loop_policy().new_event_loop() yield loop loop.close() @pytest.fixture(scope="function") async def db_session() -> AsyncGenerator[AsyncSession, None]: """创建测试数据库会话""" async with test_engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) async with TestSessionLocal() as session: yield session async with test_engine.begin() as conn: await conn.run_sync(Base.metadata.drop_all) @pytest.fixture(scope="function") async def client(db_session: AsyncSession) -> AsyncGenerator[AsyncClient, None]: """创建测试客户端""" async def override_get_db(): yield db_session app.dependency_overrides[get_db] = override_get_db async with AsyncClient(app=app, base_url="http://test") as ac: yield ac app.dependency_overrides.clear()