Как я могу использовать базу данных в памяти для Pytest или избежать того, что данные акутально будут писать в базе данных после тестирования, например Django Testcase? < /p>
Я не хочу менять свой код. Я создал функцию для создания пользователя с проверкой и многом другом. Для этой функции я использовал SQLachemy с асинхронным контекстом для настройки соединения. < /P>
like: < /p>
class DatabaseConnection:
async def __aenter__(self):
...
async def __aexit__(self, exc_type, exc_val, exc_tb):
...
< /code>
Мое создание пользователя выглядит так: < /p>
async def create_user(self, username: str, display_name: str, biography: str):
""" Create a new user in the database. """
# Validation with Pydantic ...
# Run the SQLAlchemy session and create the user
async with DatabaseConnection() as session:
...
< /code>
Теперь, когда я начинаю тестировать эту функцию в Pytest, она записывает данные в базе данных, но это единственный тест, и я не хочу сохранять бесполезные и нереальные данные в моей базе данных.import pytest
from sqlalchemy.ext.asyncio import AsyncSession
from initialisier import AsyncSessionLocal
import logging
logger = logging.getLogger(__name__)
@pytest.fixture
async def db_session():
async with AsyncSessionLocal() as session:
try:
yield session
except Exception as e:
logger.error(f"Error during test: {e}", exc_info=True)
finally:
await session.rollback()
< /code>
test_service.py
@pytest.mark.asyncio
async def test_create_user_success(self, db_session, monkeypatch):
""" Test creating a user successfully. """
async def fake_enter(self):
return db_session
monkeypatch.setattr("connection.DatabaseConnection.__aenter__", fake_enter)
user = await self.service.create(
username=self.username, display_name=self.display_name, biography=self.biography
)
assert user is not None
assert user.username == self.username
assert user.display_name == self.display_name
assert user.biography == self.biography
assert user.id is not None
Подробнее здесь: https://stackoverflow.com/questions/796 ... nging-code
Как использовать в базе данных памяти для Pytest без изменения кода? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение