Вопрос проверяет понимание разных уровней тестирования и умение выбирать подходящий тип тестов для проверки логики и поведения приложения.
Unit-тесты проверяют отдельные классы или методы в изоляции от внешних зависимостей. Функциональные и интеграционные тесты проверяют, как несколько компонентов работают вместе. В unit-тестах часто используют моки и стабы, а в интеграционных — реальные сервисы, БД или HTTP-запросы. Unit-тесты быстрые и точечные, а функциональные — медленнее, но ближе к реальному поведению приложения.
В тестировании важно понимать, что разные типы тестов решают разные задачи и дополняют друг друга.
Определение: Unit test — это тест, который проверяет минимальную единицу кода (метод или класс) в изоляции.
Определение: Functional / Integration test — это тест, который проверяет совместную работу нескольких компонентов системы.
Unit-тесты фокусируются на логике одного элемента.
Что характерно:
тестируется один класс или метод
внешние зависимости подменяются моками
не используется реальная БД, очередь, файловая система
выполняются очень быстро
Пример идеи unit-теста:
// проверяем только бизнес-логику метода
$result = $calculator->sum(2, 3);
$this->assertEquals(5, $result);
Эти тесты проверяют, как система работает “целиком” или большими частями.
Что характерно:
участвуют реальные компоненты
может использоваться тестовая БД
проверяется HTTP-запрос → контроллер → сервис → БД
выполнение медленнее, чем у unit-тестов
Пример идеи функционального теста:
$response = $this->post('/users', ['email' => 'test@mail.com']);
$response->assertStatus(201);
Перед сравнением важно отметить, что цель у тестов разная.
Объект проверки
unit: отдельный класс или метод
functional/integration: несколько компонентов вместе
Изоляция
unit: максимальная
functional/integration: минимальная или отсутствует
Скорость
unit: быстрые
functional/integration: медленнее
Назначение
unit: защита бизнес-логики
functional/integration: проверка сценариев использования
большую часть тестов делают unit
ключевые сценарии покрывают функциональными тестами
интеграционные тесты используют для проверки работы с БД, API, очередями
Unit-тесты нужны для быстрой проверки логики и раннего поиска ошибок, а функциональные и интеграционные — для уверенности, что система корректно работает как единое целое.