CategoriesAutomated testFlutter

Bikin Unit Testing di Flutter

dalam membuat aplikasi kita memerlukan testing untuk mengetahui kode kita sudah benar atau tidak dan apakah aplikasi dapat berjalan sesuai dengan Goal nya. kebanyakan dari kita melakukan testing dengan cara manual seringkali membutuhkan waktu yang cukup lama karena dilakukan secara manual, terkadang hasilnya juga kurang maksimal karena ada test case yang terlewatkan.

Automated Testing dibuat untuk mengatasi masalah tersebut, dengan automated testing kita hanya perlu mengubah test case kita dalam bentuk kode yang bisa kita jalankan berkali kali dan akan menghasilkan status fail atau success. pada flutter automated testing ada 3 jenis yaitu Unit Testing, Widget Testing, dan Integration Testing. pada artikel ini kita akan membahas Unit Testing.

Unit Testing memungkinkan kita melakukan automated testing ke unit terkecil di aplikasi seperti function atau class. cara kerja unit testing adalah kita menjalankan function atau class yang akan kita test, lalu kita tentukan nilai output yang kita harapkan lalu kita cocokkan dengan hasil output dari function atau class yang kita test, testing akan success saat semua output memenuhi ekspektasi dan akan fail jika ada nilai yang tidak memenuhi ekspektasi.

sebagai contoh disini kita punya class dengan 2 static function untuk menghitung luas dan keliling lingkaran.

import 'dart:math';

class Perhitungan {
  static double luasLingkaran(double jarijari) {
    double luas = pi * pow(jarijari, 2);
    return luas.ceilToDouble();
  }

  static double kelilingLingkaran(double jarijari) {
    double keliling = 2 * pi * jarijari;
    return keliling.ceilToDouble();
  }
}

lalu untuk membuat unit testing buat satu class di folder test, beri nama perhitungan_test.dart

sebelum meng kode test case nya pastikan library flutter_test sudah terpasang di pubspec.yaml pada bagian dev_dependencies

jika sudah sekarang isi kode pada class perhitungan_test dengan kode sebagai berikut :

void main() {
  test("Luas Lingkaran", () {
    double luasActual = Perhitungan.luasLingkaran(20);
    double luasExpected = 1257.0;
    expect(luasActual, luasExpected);
  });

  test("Keliling Lingkaran", () {
    double kelilingActual = Perhitungan.kelilingLingkaran(20);
    double kelilingExpected = 125.0;
    expect(kelilingActual, kelilingExpected);
  });
}

untuk melakukan unit test kita memerlukan method test dengan parameter judul test dan anonimous function yang berisi kode testing. pada kode testing langkah pertama kita tampung hasil sebenarnya dari function yang akan kita test, lalu kita tentukan hasil ekspektasinya, lalu di cocokkan dengan method expect yang berisikan parameter hasil sebenarnya dan hasil ekspektasi. kita bisa memasukkan lebih dari satu pengecekan tergantung kebutuhan kita. sekarang coba run test tersebut dengan meng klik icon hijau di sebelah kiri void main, lalu klik Run ‘test in perhitungan…’

maka hasilnya pasti akan fail

ternyata hasil sebenarnya dan ekspektasi kita pada test keliling lingkaran tidak sama. hasil sebenarnya 126.0 tapi ekspektasi kita 125.0. jika sudah begini langkah pertama kita cek kode function keliling lingkaran apakah kode kita ada yang salah atau tidak.

sepertinya kode nya sudah benar karena rumus keliling lingkaran adalah 2 x pi x jari-jari, berarti disini nilai ekspektasi kita yang salah. maka kita ubah nilai ekspektasi nya sesuai nilai sebenarnya.

kita coba run kembali

dan akhirnya test kita berhasil success.

cukup mudah bukan untuk membuat unit testing ? unit testing disini berjalan tanpa perlu kita running di device / emulator, jika pada function kita memerlukan parameter yang bisa didapat hanya jika kita me running aplikasi di device / emulator seperti context kita perlu melakukan mocking agar test nya bisa berjalan lancar. mocking disini berarti kita membuat object tiruan yang mirip dengan object sebenarnya, kita akan membahas tentang mocking di artikel yang lain.

Terima kasih sudah mampir di artikel saya, dan semoga bermanfaat.

Published by Ahmad Saifur Ridlo

Android Developer at Algostudio.net

Leave a Reply

Your email address will not be published. Required fields are marked *