Flutter - Pengujian
Pengujian adalah fase yang sangat penting dalam siklus hidup pengembangan suatu aplikasi. Ini memastikan bahwa aplikasi berkualitas tinggi. Pengujian membutuhkan perencanaan dan pelaksanaan yang cermat. Ini juga merupakan fase pengembangan yang paling memakan waktu.
Bahasa Dart dan kerangka Flutter memberikan dukungan ekstensif untuk pengujian otomatis suatu aplikasi.
Jenis Pengujian
Secara umum, tiga jenis proses pengujian tersedia untuk menguji aplikasi sepenuhnya. Mereka adalah sebagai berikut -
Pengujian Unit
Pengujian unit adalah metode termudah untuk menguji aplikasi. Ini didasarkan pada memastikan kebenaran sepotong kode (fungsi, secara umum) atau metode kelas. Tapi, itu tidak mencerminkan lingkungan nyata dan selanjutnya, merupakan pilihan paling sedikit untuk menemukan bug.
Pengujian Widget
Pengujian widget didasarkan pada memastikan kebenaran pembuatan widget, rendering, dan interaksi dengan widget lain seperti yang diharapkan. Ini melangkah lebih jauh dan menyediakan lingkungan hampir real-time untuk menemukan lebih banyak bug.
Tes integrasi
Pengujian integrasi melibatkan pengujian unit dan pengujian widget bersama dengan komponen eksternal aplikasi seperti database, layanan web, dll., Ini mensimulasikan atau mengolok lingkungan nyata untuk menemukan hampir semua bug, tetapi ini adalah proses yang paling rumit.
Flutter memberikan dukungan untuk semua jenis pengujian. Ini memberikan dukungan ekstensif dan eksklusif untuk pengujian Widget. Pada bab ini, kita akan membahas pengujian widget secara detail.
Pengujian Widget
Kerangka pengujian flutter menyediakan metode testWidgets untuk menguji widget. Ini menerima dua argumen -
- Deskripsi tes
- Kode uji
testWidgets('test description: find a widget', '<test code>');
Langkah-langkah yang Terlibat
Pengujian Widget melibatkan tiga langkah berbeda -
Render widget di lingkungan pengujian.
WidgetTester adalah kelas yang disediakan oleh framework pengujian Flutter untuk membuat dan merender widget. Metode pumpWidget dari kelas WidgetTester menerima widget apa pun dan merendernya di lingkungan pengujian.
testWidgets('finds a specific instance', (WidgetTester tester) async {
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: Text('Hello'),
),
));
});
Menemukan widget, yang perlu kita uji.
Flutter framework menyediakan banyak opsi untuk menemukan widget yang dirender di lingkungan pengujian dan umumnya disebut Finders. Finder yang paling sering digunakan adalah find.text, find.byKey, dan find.byWidget.
find.text menemukan widget yang berisi teks yang ditentukan.
find.text('Hello')
find.byKey menemukan widget dengan kunci spesifiknya.
find.byKey('home')
find.byWidget menemukan widget dengan variabel instance-nya.
find.byWidget(homeWidget)
Memastikan widget berfungsi seperti yang diharapkan.
Flutter framework menyediakan banyak opsi untuk mencocokkan widget dengan widget yang diharapkan dan biasanya disebut Matchers . Kita bisa menggunakan metode ekspektasi yang disediakan oleh framework pengujian untuk mencocokkan widget, yang kita temukan di langkah kedua dengan widget yang kita harapkan dengan memilih salah satu pencocok. Beberapa pencocokkan penting adalah sebagai berikut.
findOneWidget - memverifikasi bahwa satu widget ditemukan.
expect(find.text('Hello'), findsOneWidget);
findNothing - memverifikasi tidak ada widget yang ditemukan
expect(find.text('Hello World'), findsNothing);
findWidgets - memverifikasi lebih dari satu widget ditemukan.
expect(find.text('Save'), findsWidgets);
findNWidgets - memverifikasi N jumlah widget yang ditemukan.
expect(find.text('Save'), findsNWidgets(2));
Kode tes lengkapnya adalah sebagai berikut -
testWidgets('finds hello widget', (WidgetTester tester) async {
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: Text('Hello'),
),
));
expect(find.text('Hello'), findsOneWidget);
});
Di sini, kami merender widget MaterialApp dengan teks Halo menggunakan widget Teks di tubuhnya. Kemudian, kami menggunakan find.text untuk menemukan widget tersebut dan kemudian mencocokkannya menggunakan foundOneWidget.
Contoh Kerja
Mari kita membuat aplikasi flutter sederhana dan menulis tes widget untuk lebih memahami langkah-langkah yang terlibat dan konsepnya.
Buat aplikasi flutter baru, flutter_test_app di Android studio.
Buka widget_test.dart di folder uji. Ini memiliki contoh kode pengujian seperti yang diberikan di bawah ini -
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);
});
Di sini, kode pengujian melakukan fungsi berikut -
Merender widget MyApp menggunakan tester.pumpWidget.
Memastikan bahwa penghitung awalnya nol menggunakan findOneWidget dan findNothing matchers.
Menemukan tombol kenaikan penghitung menggunakan metode find.byIcon.
Ketuk tombol kenaikan penghitung menggunakan metode tester.tap.
Pastikan penghitung ditingkatkan menggunakan findOneWidget dan findNothing matchers.
Mari kita ketuk lagi tombol kenaikan penghitung dan kemudian periksa apakah penghitung dinaikkan menjadi dua.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
expect(find.text('2'), findsOneWidget);
Klik menu Run.
Klik tes dalam opsi widget_test.dart. Ini akan menjalankan tes dan melaporkan hasilnya di jendela hasil.