news

Senin, 15 Juni 2020

Belajar Tahap Unit Testing Androidx Jetpack


Unit Testing

Unit Testing merupakan sebuah pengujian yang memvalidasi unit kode secara individual. Tujuan dari unit testing adalah untuk memastikan bahwa setiap unit perangkat lunak dapat berjalan sesuai fungsi yang sudah ditentukan.


Telah disebutkan sebelumnya bahwa di dalam unit test, kita tidak memerlukan perangkat Android atau emulator untuk menjalankan pengujian, melainkan IDE (Android Studio) saja. Kemudian hasil dari pengujian akan ditampilkan pada konsol Android Studio.

Unit test berfungsi untuk menguji logika bisnis dalam sebuah aplikasi. Dengan demikian kita harus menuliskannya hanya untuk menguji fungsi kecil/unit kode demi memastikan apakah logika kerjanya sudah sesuai dengan yang diharapkan. Misalnya, menguji apakah hasil dari (3 x 3) sama dengan 9.

Kita akan menggunakan library JUnit untuk melakukan unit test. Library ini secara otomatis sudah ditambahkan ketika kita membuat proyek baru pada Android Studio. JUnit ini hanya digunakan untuk menjalankan tes, dengan begitu ia tidak akan di-compile ketika kita menjalankan aplikasi pada perangkat Android atau emulator. Tentunya ini bisa mengurangi ukuran dari APK.

testImplementation 'junit:junit:4.12'

Okay, mari kita coba untuk melakukan pengujian sederhana menggunakan JUnit pada sebuah logika kode. Anggap saja Anda telah memiliki sebuah kelas Utils dengan kode berikut:

Kotlin

class Utils {
@SuppressLint("SimpleDateFormat")
fun toSimpleString(date: Date): String {
return SimpleDateFormat("EEE, dd MM yyy").format(date)
}

}
Java
public class Utils {
@SuppressLint("SimpleDateFormat")
public String toSimpleString(Date date){
return new SimpleDateFormat("EEE, dd MM yyy").format(date);
}

}

Fungsi di atas bisa kita gunakan untuk mengubah date menjadi string dengan format yang sudah ditentukan. 

Sekarang kita akan menambahkan sebuah unit test pada fungsi tersebut untuk menguji apakah hasilnya sesuai atau tidak dengan yang kita harapkan. Untuk menambahkan unit test, tekan SHIFT + CTRL + T pada fungsi tersebut dan pilih Create new test ..., maka akan muncul dialog seperti berikut:
2019070915021298e9c37aad3b1f62d8d520eeca3859a1
Berikan tanda centang dan klik OK maka akan muncul sebuah dialog baru untuk memilih tujuan penyimpanan dari kelas pengujian yang akan dibuat.
20190709150306133e2bb43eed16528b894551efb16341
Karena ini adalah sebuah unit test, maka Anda harus memilih folder ../test/.. untuk menyimpannya. Silakan pilih folder tersebut dan klik OK. Android Studio secara otomatis akan membuatkan Anda sebuah kelas testing dengan nama UtilsTest di mana di dalamnya sudah terdapat sebuah test function dari fungsi sebelumnya. Anda bisa mengubah nama dari fungsi tersebut sesuai yang Anda inginkan.
Kotlin
class UtilsTest {
@Test
fun toSimpleString() {
}
}
Java
public class UtilsTest {
@Test
public void toSimpleString() {
}
}
Anotasi @Test di atas akan memberitahu JUnit bahwa fungsi yang dilampirkan dapat dijalankan sebagai sebuah test case. Sekarang Anda bisa menambahkan kode untuk melakukan pengujian di dalam fungsi toSimpleString() di atas.
Kotlin
@Test
fun toSimpleString() {
val dateFormat: DateFormat = SimpleDateFormat("MM/dd/yyyy")
var date: Date? = null
try {
date = dateFormat.parse("02/28/2018")
} catch (e: ParseException) {
e.printStackTrace()
}
assertEquals("Wed, 28 Feb 2018", Utils.toSimpleString(date))

}
Java
@Test
public void toSimpleString() {
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Date date = null;
try {
date = dateFormat.parse("02/28/2018");
} catch (ParseException e) {
e.printStackTrace();
}
assertEquals("Wed, 28 Feb 2018", Utils.toSimpleString(date));

}
Perhatikan contoh kode di atas. Kita telah menambahkan fungsi assertEquals() dari JUnit untuk memastikan bahwa kedua parameter di dalamnya memiliki nilai yang sama. Parameter pertama dari fungsi tersebut adalah nilai yang diharapkan, sedangkan parameter kedua adalah nilai yang dihasilkan dari fungsi toSimpleString(). Sekarang coba Anda jalankan pengujian tersebut dengan menekan SHIFT + CTRL + F10 atau klik kanan pada file UtilsTest dan pilih Run ‘UtilsTest’. Selanjutnya akan muncul hasil pengujian pada konsol seperti berikut:
20190709161654786e19f9be55d832eefca3302f09e82e
Dari hasil pengujian di atas, kita bisa melihat bahwa pengujian yang telah kita lakukan gagal, ditunjukan dengan indikator warna merah pada konsol. Kegagalan tersebut disebabkan nilai yang dikeluarkan oleh fungsi toSimpleString() berbeda dengan nilai yang kita harapkan.
Coba perhatikan lagi hasil pengujian yang tertera pada konsol di atas. Di sana terdapat log error yang menunjukan bahwa nilai yang kita harapkan adalah Wed, 28 Feb 2018 sedangkan nilai yang dihasilkan oleh fungsi toSimpleString() adalah Wed, 28 02 2018. Dengan demikian, kita bisa memastikan bahwa di dalam fungsi toSimpleString() terdapat kode yang kurang tepat.
Sekarang coba kita buka kembali kelas Utils dan temukan letak kesalahan pada fungsi toSimpleString(). Di sana kita menentukan sebuah pola (pattern) dari SimpleDateFormat dengan "EEE, dd MM yyy", di mana MM tersebut akan menghasilkan output dari Month dengan format angka, misal: 02. Format tersebut berbeda dengan format yang kita harapkan, dan menyebabkan pengujian gagal. Silakan ubah pola dari SimpleDateFormat menjadi "EEE, dd MMM yyy":
Kotlin
@SuppressLint("SimpleDateFormat")
fun toSimpleString(date: Date?): String? {
return SimpleDateFormat("EEE, dd MMM yyy").format(date)
}
Java
@SuppressLint("SimpleDateFormat")
public static String toSimpleString(Date date){
return new SimpleDateFormat("EEE, dd MMM yyy").format(date);
}
Jalankanlah kembali pengujiannya. Seharusnya pengujian akan berhasil, sebagaimana ditandai oleh indikator warna hijau seperti berikut:
201907091623136a2ae26535b44e8e89a54c94a8729179