Ответ
Тесты, которые взаимодействуют с реальными внешними зависимостями (базы данных, API, файловая система) без использования mock-объектов, относятся к интеграционным или сквозным (end-to-end) тестам.
Их цель — проверить корректность совместной работы нескольких компонентов системы.
- Интеграционные тесты проверяют взаимодействие между конкретными модулями. Например, как сервис работает с реальной базой данных.
- Сквозные (end-to-end) тесты проверяют полный пользовательский сценарий от начала до конца, имитируя действия реального пользователя через UI или API.
Пример интеграционного теста (pytest):
# tests/test_user_repository.py
def test_user_creation_in_db(database_session):
"""Проверяет создание и извлечение пользователя из реальной БД."""
# Действие: создаем и сохраняем пользователя
user_repo = UserRepository(database_session)
new_user = user_repo.create(name="Alice", email="alice@example.com")
# Проверка: извлекаем пользователя по ID и сверяем данные
retrieved_user = user_repo.get_by_id(new_user.id)
assert retrieved_user is not None
assert retrieved_user.name == "Alice"
Основное преимущество таких тестов — высокая достоверность, так как они проверяют систему в условиях, близких к реальным. Недостаток — они медленнее и сложнее в настройке по сравнению с юнит-тестами.