Ответ
Пирамида тестирования — это концепция, описывающая оптимальное соотношение различных типов тестов в проекте для обеспечения надежности и эффективности. В Flutter она выглядит так:
-
Unit-тесты (основание) — тестируют отдельные функции, классы или методы в изоляции. Они самые быстрые и многочисленные.
// Пример unit-теста для простого счетчика test('Counter value should be incremented', () { final counter = Counter(); counter.increment(); expect(counter.value, 1); });Для них мы используем пакет
test. Они не требуют запуска Flutter-движка. -
Widget-тесты (середина) — тестируют отдельные виджеты в изолированной среде. Они медленнее unit-тестов, но проверяют рендеринг и взаимодействие.
// Пример widget-теста testWidgets('MyWidget has a title and message', (WidgetTester tester) async { await tester.pumpWidget(const MyWidget(title: 'T', message: 'M')); expect(find.text('T'), findsOneWidget); expect(find.text('M'), findsOneWidget); });Для них используется
flutter_test. -
Интеграционные (E2E) тесты (верхушка) — тестируют полное приложение на реальном устройстве или эмуляторе, имитируя действия пользователя. Они самые медленные, хрупкие и их должно быть меньше всего.
// Пример интеграционного теста с integration_test testWidgets('Tap on floating action button, verify counter', (tester) async { app.main(); await tester.pumpAndSettle(); expect(find.text('0'), findsOneWidget); await tester.tap(find.byType(FloatingActionButton)); await tester.pumpAndSettle(); expect(find.text('1'), findsOneWidget); });
Принцип: Создаем широкое основание из быстрых и надежных unit-тестов, поддерживаем его меньшим количеством widget-тестов и завершаем пирамиду минимальным набором интеграционных тестов для критических пользовательских сценариев. Это позволяет быстро находить ошибки и поддерживать высокую скорость разработки.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶