Вопрос проверяет практический опыт тестирования и понимание различий между уровнями тестов.
Да, unit- и integration-тесты решают разные задачи. Unit-тесты проверяют отдельные классы и методы в изоляции. Integration-тесты проверяют взаимодействие компонентов и инфраструктуры. Unit-тесты быстрые и дешёвые, integration — медленнее, но надёжнее. В реальных проектах используются оба вида.
Тестирование — это не один инструмент, а набор уровней проверки качества.
Unit-тесты — тесты, проверяющие поведение одного класса или метода в изоляции.
Integration-тесты — тесты, проверяющие совместную работу нескольких компонентов системы.
Основной фокус — логика.
Характеристики:
Нет реальной БД
Нет сети
Используются моки
Выполняются быстро
Пример:
// проверка бизнес-логики без Spring-контекста
Фокус — взаимодействие компонентов.
Характеристики:
Реальная БД или контейнер
Spring-контекст
Проверка конфигурации
Медленнее unit-тестов
Пример:
// тест репозитория с реальной БД
Unit-тесты — основная масса
Integration — для критичных сценариев
CI запускает оба типа
Unit- и integration-тесты дополняют друг друга. Только вместе они дают уверенность в корректной работе системы.