Ответ
Тестирование структурировано по уровням (пирамида тестирования) и целям. Вот ключевые виды:
По уровню изоляции (Пирамида)
-
Модульные тесты (Unit Tests)
- Цель: Проверить корректность работы отдельной единицы кода (метода, класса) в полной изоляции.
- Инструменты: JUnit, TestNG, Mockito (для заглушек зависимостей).
- Пример:
@Test void shouldReturnSumOfTwoNumbers() { Calculator calc = new Calculator(); int result = calc.add(2, 3); assertEquals(5, result); // Проверяем только логику метода add }
-
Интеграционные тесты (Integration Tests)
- Цель: Проверить взаимодействие нескольких модулей или систем (БД, внешние API, другие сервисы).
- Инструменты: Spring Boot Test (
@SpringBootTest), Testcontainers (для поднятия реальных БД в Docker). - Фокус: Корректность интеграции, транзакции, конфигурация.
-
Системные / End-to-End (E2E) тесты
- Цель: Проверить работу всего приложения целиком с точки зрения конечного пользователя.
- Инструменты: Selenium, Cypress, Playwright (для UI), REST Assured (для API).
- Фокус: Полные пользовательские сценарии.
По целям и свойствам
-
Функциональные тесты
- Проверяют соответствие функциональным требованиям ("что система делает"). Могут быть на любом уровне (Unit, E2E).
-
Нефункциональные тесты
- Нагрузочное (Load) и стресс-тестирование: Проверка производительности под нагрузкой (JMeter, Gatling).
- Тестирование безопасности (Security): Поиск уязвимостей.
-
Поддерживающие виды по стратегии
- Дымовое (Smoke): Быстрая проверка основных функций после сборки.
- Регрессионное (Regression): Проверка, что новые изменения не сломали существующий функционал.
- Приёмочное (Acceptance): Проверка соответствия бизнес-требованиям, часто заказчиком.
Практическое правило (Пирамида): Писать много быстрых и дешёвых unit-тестов, меньше интеграционных и ещё меньше медленных и дорогих E2E-тестов.