Ответ
Для widget-тестов я использую встроенный пакет flutter_test. Его ключевые инструменты:
testWidgets(): Функция для объявления теста.WidgetTester: Предоставляет методы для рендеринга виджетов (pumpWidget), взаимодействия с ними (tap,enterText) и управления временем (pumpAndSettle).Finder: Для поиска виджетов в дереве (find.text(),find.byKey(),find.byType()).Matcher: Для проверок (findsOneWidget,findsNothing,findsNWidgets).
Пример теста кнопки-счётчика из моего проекта:
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Counter increments when + button is pressed', (tester) async {
// 1. Рендерим виджет
await tester.pumpWidget(const MyApp());
// 2. Проверяем начальное состояние
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// 3. Имитируем действие пользователя
await tester.tap(find.byIcon(Icons.add));
await tester.pump(); // Триггерим перестроение
// 4. Проверяем результат
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}
Дополнительные инструменты в моём стеке:
mocktail: Для создания моков (предпочитаю егоmockito, так как не требует генерации кода).bloc_test: Для тестирования BLoC/Cubit (интегрируется сflutter_test).golden_toolkit: Для golden-тестов (сравнения скриншотов).
Ключевая практика — это изоляция тестов: использование setUp для подготовки моков и setUpWidgetTester для кастомизации среды (например, размера экрана).