Ответ
Это основные уровни тестирования, образующие тестовую пирамиду. Они различаются по объему проверяемого кода, скорости выполнения и сложности поддержки.
Модульные тесты (Unit Tests)
- Цель: Проверить корректность работы отдельной функции, метода или класса в полной изоляции.
- Объем: Минимальный. Все внешние зависимости (база данных, API, файловая система) заменяются моками или стабами.
- Скорость: Очень высокие.
- Пример (Python/pytest):
def test_calculate_discount(): # Изолированный тест чистой функции assert calculate_discount(100, 10) == 90 assert calculate_discount(0, 10) == 0
Интеграционные тесты (Integration Tests)
- Цель: Проверить взаимодействие между несколькими компонентами системы (например, сервис + база данных, два микросервиса).
- Объем: Средний. Используются реальные или приближенные к реальным зависимости (тестовая БД, заглушки сервисов).
- Скорость: Средние.
- Пример (проверка работы с БД):
def test_user_repository_saves_to_db(db_session): repo = UserRepository(db_session) user = User(name="Alice") saved_user = repo.save(user) # Проверяем реальное взаимодействие с БД assert saved_user.id is not None assert db_session.query(User).filter_by(id=saved_user.id).first() is not None
Сквозные тесты (End-to-End / E2E Tests)
- Цель: Имитировать полный путь пользователя через приложение, проверяя всю систему целиком (UI, бэкенд, БД, сети).
- Объем: Максимальный. Запускается всё приложение в среде, максимально близкой к продакшену.
- Скорость: Низкие.
- Пример (Cypress для веб-приложения):
describe('Пользовательский поток покупки', () => { it('пользователь может добавить товар в корзину и оформить заказ', () => { cy.visit('/products'); cy.get('[data-testid="product-card"]').first().click(); cy.get('[data-testid="add-to-cart"]').click(); cy.visit('/cart'); cy.contains('Оформить заказ').click(); cy.url().should('include', '/checkout'); cy.get('[data-testid="order-success"]').should('be.visible'); }); });
Ключевое правило (Пирамида тестов): Много быстрых и дешёвых модульных тестов в основании, меньше интеграционных и совсем мало медленных и дорогих E2E-тестов на вершине.