تست کردن در فلاتر – Flutter testing
آزمایش مرحله مهمی در چرخه زندگی توسعه یک برنامه است. تضمین می کند که این برنامه از کیفیت بالایی برخوردار است. آزمایش نیاز به برنامه ریزی و اجرای دقیق دارد. همچنین زمان برترین مرحله از توسعه است.
زبان Dart و فریمورک فلاتر پشتیبانی گسترده ای از آزمایش خودکار ( automated testing) یک برنامه را ارائه می دهد.
مقالات
انواع تست – type testing فلاتر
به طور کلی ، سه نوع فرآیند آزمایش برای تست کامل یک برنامه در دسترس است. آنها به شرح زیر است –
Unit Testing
Unit testing ساده ترین روش برای تست یک برنامه است. این مبتنی بر اطمینان از صحت یک قطعه کد (یک function، به طور کلی) oa مت یک کلاس است. اما ، این وضعیت واقعی را منعکس نمی کند و متعاقباً ، کمترین گزینه برای یافتن اشکالات است.
Widget Testing
آزمایش ویجت مبتنی بر اطمینان از صحت ایجاد ویجت ، ارائه و تعامل با سایر ابزارک ها همانطور که انتظار می رود است. این قدم یک قدم جلوتر می رود و برای یافتن اشکالات بیشتر ، در زمان واقعی محیط نزدیک است.
Integration Testing
آزمایش یکپارچه سازی شامل تست واحد و آزمایش ویجت به همراه مؤلفه خارجی برنامه مانند بانک اطلاعاتی ، وب سرویس و غیره است. برای یافتن تقریبا همه اشکالات ، محیط واقعی را شبیه سازی یا مسخره می کند ، اما پیچیده ترین فرآیند است.
فلاتر پشتیبانی از انواع آزمایش را ارائه می دهد. این پشتیبانی گسترده و انحصاری را برای آزمایش ویجت فراهم می کند. در این فصل ، به طور مفصل درباره آزمایش ویجت بحث خواهیم کرد.
Widget Testing
فریمورک تست فلاتر متد testWidgets را برای تست ویجت ها ارائه می دهد. دو آرگومان را می پذیرد –
- Test description
- Test code
1 |
testWidgets('test description: find a widget', '<test code>'); |
مراحل تست کردن
آزمایش ویجت شامل سه مرحله مجزا است –
- ویجت را در محیط آزمایش Render می کند.
- WidgetTester کلاس ارائه شده توسط Flutter testing framework برای ساخت وrender ویجت است. pumpWidget از متد WidgetTester هر ویجت را می پذیرد و آن را در محیط تست رندر می کند.
1 2 3 4 5 6 7 |
testWidgets('finds a specific instance', (WidgetTester tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold( body: Text('Hello'), ), )); }); |
- یافتن ویجت ، که ما باید آن را تست کنیم.
- فریمورک Flutter گزینه های بسیاری را برای یافتن ویجت های رندر شده در محیط آزمایش فراهم می کند و آنها معمولاً Finder نامیده می شوند. متداول ترین finders find.text ، find.byKey و find.byWidget است.
- find.text ویجتی را که حاوی متن مشخص است ، می یابد
- فریمورک Flutter گزینه های بسیاری را برای یافتن ویجت های رندر شده در محیط آزمایش فراهم می کند و آنها معمولاً Finder نامیده می شوند. متداول ترین finders find.text ، find.byKey و find.byWidget است.
1 |
find.text('Hello') |
find.byKey ویجت را با کلید خاص خود پیدا کنید.
1 |
find.byKey('home') |
find.byWidget ویجت را با متغیر نمونه instance variable آن پیدا کنید.
1 |
find.byWidget(homeWidget) |
- اطمینان از کارکرد ویجت همانطور که انتظار می رود. فریمورکFlutter گزینه های بسیاری را برای مطابقت با ویجت با ویجت مورد انتظار ارائه می دهد و آنها معمولاً Matchers خوانده می شوند . ما می توانیم از متد expect ارائه شده توسط testing framework برای مطابقت یا match با ویجت استفاده کنیم ، که در مرحله دوم با ویجت مورد نظر خود با انتخاب هر یک از ماترک ها پیدا کردیم. برخی از matcherهای مهم به صورت زیر است.
- foundOneWidget – تأیید می کند ویجت واحدی یافت شده است.
1 |
expect(find.text('Hello'), findsOneWidget); |
findNothing – تأیید می کند هیچ ویجت یافت نمی شود
1 |
expect(find.text('Hello World'), findsNothing); |
findWidgets – تأیید بیش از یافتن یک ویجت واحد.
1 |
expect(find.text('Save'), findsWidgets); |
foundNWidgets – تأیید می کند که تعداد ویجت ها یافت شده اند.
1 |
expect(find.text('Save'), findsNWidgets(2)); |
کد تست کامل به صورت زیر است –
1 2 3 4 5 6 7 8 |
testWidgets('finds hello widget', (WidgetTester tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold( body: Text('Hello'), ), )); expect(find.text('Hello'), findsOneWidget); }); |
در اینجا ، ما یک ویجت MaterialApp را با متن Hellow با استفاده از ویجت Text در body آن ارائه کردیم. سپس از find.text برای یافتن ویجت استفاده کردیم و سپس با استفاده از findOneWidget آن را همسان mached کردیم.
مثال کاربردی تست فلاتر
ما یک اپلیکیشن ساده فلاتر ایجاد می کنیم و یک تست ویجت می نویسیم تا مراحل بهتر و مفهوم را بهتر بشناسیم.
- یک برنامه جدید ، flutter_test_app را در studio Android ایجاد کنید.
- widget_test.dart را در پوشه test باز کنید. دارای کد تست نمونه ای است که در زیر آورده شده است –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. await tester.pumpWidget(MyApp()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget); expect(find.text('1'), findsNothing); // Tap the '+' icon and trigger a frame. await tester.tap(find.byIcon(Icons.add)); await tester.pump(); // Verify that our counter has incremented. expect(find.text('0'), findsNothing); expect(find.text('1'), findsOneWidget); }); |
- در اینجا ، test code عملکردهای زیر را انجام می دهد –
- ویجت MyApp را با استفاده از tester.pumpWidget رندر کرده است.
- اطمینان حاصل می کند که counter در ابتدا با استفاده از findOneWidget صفر است و پیداست هیچ مشکلی وجود ندارد.
- counter increment button را با استفاده از متد find.byIcon پیدا می کند.
- counter increment button را با استفاده از متد tester.tap ضربه بزنید.
- تضمین می کند که counter با استفاده از findOneWidget findsNothing افزایش پیدا کند.
- دوباره روی دکمه counter increment ضربه بزنیم و سپس بررسی کنیم که آیا counter به دو افزایش یافته است.
1 2 3 4 |
await tester.tap(find.byIcon(Icons.add)); await tester.pump(); expect(find.text('2'), findsOneWidget); |
- روی منوی Run کلیک کنید.
- در گزینه widget_test.dart روی tests کلیک کنید. این تست را اجرا می کند و نتیجه را در result window گزارش می دهد.

دیدگاهتان را بنویسید