Dark Theme - On/Off
Pulsate - On
Waves - On

Unit Tests (Юнит-тесты)

Что это: Проверка изолированных кусков бизнес-логики (классов, функций) без участия пользовательского интерфейса (UI).

Суть: Берем отдельную функцию (например, расчет скидки) или BLoC, подаем на вход данные и сверяем результат с ожидаемым.

Как работает: Пишем тесты в пакете test или flutter_test. Используем методы arrange (подготовка), act (вызов метода), assert (сравнение: expect(a, b)).

Для чего: Убедиться, что вычисления, парсинг JSON и выдача стейтов в BLoC работают без ошибок.

Итог: Самые быстрые тесты. Пишутся тысячами. Выполняются за секунды. Охватывают логику под капотом (Domain и Data слои).

Widget Tests (Виджет-тесты)

Что это: Тестирование UI-компонентов в виртуальной среде.

Суть: Flutter "надувает" виджет в памяти (без реального эмулятора), кликает по кнопкам и проверяет, что текст изменился.

Как работает: Используется WidgetTester. Мы строим виджет tester.pumpWidget(...), ищем элементы (find.byType(ElevatedButton)), имитируем нажатия (tester.tap()) и перерисовываем кадр (tester.pump()).

Для чего: Проверить работу UI. Например, что при вводе неверного пароля появляется красная ошибка, а кнопка "Войти" становится серой.

Итог: Тестирует логику интерфейса. Работает медленнее юнит-тестов, но намного быстрее, чем запуск реального приложения на телефоне.

Integration Tests (E2E Тесты)

Что это: Сквозное (End-to-End) тестирование.

Суть: Запуск полностью собранного приложения на реальном девайсе или эмуляторе. Робот проходит весь путь пользователя.

Как работает: Пакет integration_test. Робот открывает приложение, вводит логин/пароль, скроллит ленту новостей, делает заказ, ждет ответа от реального (или тестового) сервера.

Для чего: Убедиться, что ВСЕ слои приложения (UI, Логика, Сеть, БД) корректно связаны между собой и работают в комплексе.

Итог: Самые долгие и дорогие в написании тесты. Пишутся только для критических путей пользователя (например, процесс оплаты). Дают 100% гарантию работоспособности фичи.

Golden Tests (Скриншот-тесты)

Что это: Попиксельное визуальное тестирование верстки.

Суть: Защищает от "съехавшего" дизайна. Создается эталонная картинка (Master Image). При каждом тесте Flutter делает скриншот виджета и сравнивает его с эталоном.

Как работает: expectLater(find.byType(MyWidget), matchesGoldenFile('master_image.png')). Если пиксели не совпадают, тест падает и генерирует картинку с красными зонами отличий.

Для чего: Если кто-то из разработчиков случайно поменяет глобальную тему шрифтов или отступов, Голден тест моментально "покраснеет", не дав сломанному дизайну уйти в релиз.

Итог: Гарантия того, что UI выглядит абсолютно так, как задумано, и никто случайно не сломал отступы или цвета.

Блиц-ответы для собеседования

В: Что такое Mocks (Моки)?
О: Это "фейковые" объекты для тестов. Например, чтобы протестировать BLoC, мы не лезем в реальный интернет. Мы создаем MockRepository (через пакет mockito), который всегда моментально отдает нужный нам успешный или ошибочный ответ.

В: Как протестировать BLoC?
О: Через пакет bloc_test. Мы задаем начальное состояние, отправляем Event (событие) и в блоке expect перечисляем список State (состояний), которые BLoC должен выдать в правильном порядке.

В: Что такое Test Coverage (Покрытие)?
О: Это метрика, показывающая, какой процент строк кода был физически затронут во время запуска тестов. Коммерческий стандарт обычно 70-80%.