Когда вы пишете юнит-тесты, подключение к реальной БД — лишнее:
- это медленно,
- тесты становятся нестабильными,
- нужен живой сервер.
Решение — замокать вызов
pandas.read_sql и вернуть подставные данные.Пример функции:
def query_user_data(user_id):
query = f"SELECT id, name FROM users WHERE id = {user_id}"
return pd.read_sql(query, "postgresql://localhost/mydb")
Тест с моком:
from unittest.mock import patch
import pandas as pd
@patch("pandas.read_sql")
def test_database_query_mocked(mock_read_sql):
mock_read_sql.return_value = pd.DataFrame(
{"id": [123], "name": ["Alice"]}
)
result = query_user_data(user_id=123)
assert result["name"].iloc[0] == "Alice"
Теперь вместо запроса в реальную базу тест подставляет фейковые данные. Так можно проверить бизнес-логику функции быстро и надёжно.
@sqlhub
