Widget testing
Flutter test piramidası üç səviyyədən ibarətdir: unit (məntiq, Flutter olmadan), widget (bir widget və ya ekran, real cihaz olmadan), integration (bütöv tətbiq, real cihaz/emulator).
Widget test ən yaxşı balansdır: real UI ilə işləyir, amma cihaz lazım deyil və saniyələr çəkir. testWidgets funksiyası WidgetTester verir:
tester.pumpWidget(...)— widget ağacını qururfind.text(...),find.byType(...),find.byKey(...)— element tapırtester.tap(...),tester.enterText(...)— qarşılıqlı əlaqəexpect(finder, findsOneWidget)— yoxlama
`pump` və `pumpAndSettle` fərqi widget testinin ən çox səhv edilən hissəsidir:
pump()— bir frame irəli aparırpump(Duration)— göstərilən qədər vaxt keçirirpumpAndSettle()— heç bir animasiya qalmayana qədər frame-ləri işlədir
pumpAndSettle rahatdır, amma sonsuz animasiya varsa (məsələn dayanmadan fırlanan CircularProgressIndicator) test timeout ilə donur. Belə hallarda dəqiq pump(Duration(...)) istifadə olunur.
Digər vacib nöqtə: widget testində şəbəkə sorğusu olmamalıdır — repository saxta ilə əvəzlənir, əks halda test yavaş və qeyri-stabil olur.
Interview ipucu. QA fonu olan namizəddən Flutter testi barədə daha çox gözlənilir. Güclü cavabda nəyi test etdiyini göstər: davranışı, implementasiyanı yox. find.byType(Padding) kimi yoxlama refactoring-də sınır və heç nə sübut etmir; find.text('Sifariş yaradıldı') isə istifadəçinin gördüyü nəticəni yoxlayır. Bu ayrım Playwright-dakı locator seçimi ilə eyni prinsipdir.
📚 Mənbələr və sənədlər
- Testing-ə girişrəsmidocs.flutter.dev
Unit, widget və integration testlərinin nə vaxt hansının uyğun olduğu rəsmi müqayisə.
- Widget testinə girişrəsmidocs.flutter.dev
- Finder-lərrəsmidocs.flutter.dev
- WidgetTester classrəsmiapi.flutter.dev