Как использовать в базе данных памяти для Pytest без изменения кода?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать в базе данных памяти для Pytest без изменения кода?

Сообщение Anonymous »

Как я могу использовать базу данных в памяти для 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • @pytest.mark.skip против @pytest.mark.xfail в Pytest
    Anonymous » » в форуме Python
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • @pytest.mark.skip против @pytest.mark.xfail в Pytest
    Anonymous » » в форуме Python
    0 Ответы
    50 Просмотры
    Последнее сообщение Anonymous
  • @pytest.mark.skip vs @pytest.mark.xfail в pytest
    Anonymous » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Лучший способ использовать Python-Dotenv с Pytest или лучшим способом получить Pytest Test/Dev-Environment с отдельными
    Anonymous » » в форуме Python
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous
  • Изменения, внесенные в документ Word, не отражаются в потоке памяти после его изменения с помощью Open XML в .NET Core.
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»