Cara Melakukan Unit Testing pada Xcode Project

Melakukan unit testing sederhana untuk menghindari kesalahan yang tidak diinginkan ketika mengembangkan aplikasi

Auriga Aristo
Dipantry
6 min readDec 10, 2020

--

Photo by Antoine Dautry on Unsplash

Ingatkah kamu? Saat kamu masih menempuh pendidikan sekolah dasar (SD), pada pelajaran matematika, guru akan mengajarkan tentang perkalian. Mulai dari perkalian satu hingga sepuluh. Walaupun kesulitan, kamu akan berusaha sebaik mungkin untuk menghafal seratus perkalian tersebut. Setelah menghafal, gurumu pasti akan memberikan tes kepadamu yang sama seperti yang telah kamu hafalkan atau mungkin berbeda.

Sama seperti cara manusia belajar, aplikasi juga perlu belajar. Kita tidak membahas tentang machine learning, namun kita akan membahas bagaiman sebuah aplikasi kita ajarkan untuk mengolah sebuah logika sesuai yang kita telah ajarkan sebelumnya. Programmer membuat kodingan untuk dijalankan aplikasi dan programmer juga akan membuat tes dalam project yang sama untuk memvalidasi data berdasarkan logika yang telah diatur pada aplikasi. Tes yang diberikan bisa berupa unit test, integration test, dan lain-lain.

Unit Test

Dalam dunia pemrograman, unit testing merupakan sebuah proses untuk memvalidasi data atau jalannya sebuah proses pada sebagian kecil kodingan. Biasanya unit testing diterapkan pada sebuah fungsi atau method. Dengan menggunakan unit testing, developer mampu mengurangi jumlah bug sebelum kodingan pada satu bagian diimplementasikan kepada bagian koding lainnya sehingga developer mampu melakukan tindakan preventif pada error yang besar pada project nya sudah menjadi terlalu kompleks dan rumit.

Menjadi sebuah keuntungan yang besar bagi seorang developer yang ingin melakukan testing pada bagian program yang sudah jauh ke dalam aplikasi atau sudah melewati banyak tampilan. Penggunaan unit testing mampu mengurangi waktu proses debugging tanpa perlu melihat perubahan UI yang terjadi. Apabila proses testing memang membutuhkan untuk melihat perubahan UI, kamu bisa menggunakan UI Testing.

Contoh penerapan unit test menggunakan pseudocode adalah seperti di bawah ini:

x = 5
y = 2
test 1 :
validasi -> x == 5
test 2 :
x = y
validasi -> x == 2
test 3:
x = x + y
validasi -> x == 4

Unit test akan melakukan validasi terhadap setiap perubahan yang kita miliki. Pada Xcode project, kita dapat menerapkan pada file Unit Test Case Class menggunakan sebuah method yang bernama XCAssert.

Ketika kamu membuat project, di bagian bawah menu pembuatan project, kamu akan ditawarkan apakah mau memasukkan folder test atau tidak. Saya menyarankan untuk mencentang checkbox tersebut sehingga file test tidak tercampur dengan file project lainnya. Tetapi keputusan tersebut ada di tanganmu. Selain itu, kamu bisa juga menambahkan file test dalam projectmu dengan cara seperti gambar di atas.

Unit Test pada Xcode

Setelah membuat file test pada project kalian, entah di dalam main folder (folder project utama) atau pada folder unit test — biasanya bernama <nama>Tests, contoh HelloTests — kamu akan menemukan beberapa method yang sudah disediakan oleh Xcode untuk menggunakannya.

Contoh File Unit Testing pada Project Allocat

Jika kamu membuat file dari kosongan kamu akan perlu melakukan import library yang bernama XCTest sebuah library yang menampung berbagai method untuk melakukan unit testing, dan jangan lupa untuk mengimport folder utama ke dalam file testing. Mengapa? Pada file testing yang terdapat pada folder Tests, tidak memiliki kemampuan untuk mengakses method apapun pada folder utama, sehingga kamu perlu mengimportnya terlebih dahulu.

Pada gambar di atas, terdapat 4 buah method yang telah disediakan oleh Xcode:

  • setUpWithError: Sebelum sistem melakukan test, apa yang harus dipersiapkan terlebih dahulu oleh sistem? Kamu bisa menginisialisasikan variabel atau class di sini.
  • tearDownWithError: Setelah proses testing selesai, apa yang akan dilakukan oleh sistem? Kamu bisa memasukkan reset data di sini agar tidak mengubah data.
  • testExample: Proses unit testing dilakukan di sini.
  • testPerformanceExample: Proses unit testing dengan melihat performa dapat dilakukan di sini.

Penggunaan Unit Test

Dalam pembuatan fungsi testcase atau method test sendiri, kamu diwajibkan untuk menulis kata “test” di depannya sebelum menulis nama test yang akan dijalankan. Dengan begitu, kamu akan memberitahu Xcode bahwa method tersebut digunakan untuk unit testing, bukan sebagai method biasa.

Kamu akan bisa melihat icon diamond pada sebelah kiri fungsi atau pada bar row number, yang apabila mouse kita diarahkan ke icon tersebut, akan muncul gambar play.

Di dalam function tersebut, kamu bisa memanggil setiap fungsi yang telah dibuat pada project utama. Lalu fungsi yang bertanggung jawab pada validasi data bisa dipanggil di sini. Fungsi tersebut ada bermacam-macam yang bersumberkan pada XCTest.

Setidaknya ada 7 macam validasi yang disediakan oleh XCTest, yaitu :

  • Boolean Assertions: Pengecekan data dimana test mengembalikan nilai true atau false.
  • Nil and Non-Nil Assertion: Pengecekan data dimana test mengembalikan nilai nil atau tidak nil.
  • Equality and Inequality Assertions: Pengecekan 2 buah data apakah kedua data berisikan data yang sama atau tidak.
  • Comparable Value Assertions: Membandingkan 2 buah nilai apakah sebuah nilai lebih besar atau lebih kecil dari nilai lainnya.
  • Error Assertions: Pengecekan data dimana test akan memberikan error atau tidak sama sekali.
  • Unconditional Test Failures: Pengecekan tes apakah mencapai sebuah kondisi kegagalan.
  • Methods for Skipping Tests: Sebuah fungsi khusus yang akan melewati jalannya tes apabila sebuah kondisi telah dipertemukan.

Kamu bisa melihat setiap method yang mampu digunakan melalui website dokumentasi Apple Developer di sini atau melalui dokumentasi yang telah disediakan oleh Xcode.

Contoh Penerapan

Pada contoh ini, saya akan menggunakan method setUp dan test saja. Saya akan lebih banyak menggunakan data statis daripada method yang telah saya gunakan pada project utama.

Pada contoh di atas, saya menggunakan global variabel arr untuk menampung data array integer. Sebelum memulai test, saya masukkan sebuah nilai kepada array. Lalu, saya jalankan test apakah panjang array adalah 1 atau tidak. Tanda di sebelah kiri atau di dalam icon diamond menunjukkan tes yang dijalankan berhasil atau tidak.

Apabila terjadi kegagalan, maka Xcode akan memberitahu pada bagian mana terjadi kegagalan dan apa yang diharapkan oleh Xcode.

Gambar di atas menunjukkan tes pada line 20 mengalami kegagalan. XCTAssert menemukan bahwa hasil panjang array adalah 1, bukan seperti yang diharapkan adalah 2.

Kamu bisa mencoba banyak hal pada test ini, namun sebaiknya sebuah fungsi hanya memegang sebuah fungsi validasi untuk menemukan tes mana yang mengalami kegagalan. Kecuali kamu sedang mencoba mencari kesalahan atau melakukan validasi pada sebuah proses panjang, sistem validasi juga dapat digunakan daripada kamu harus berulang kali melakukan debugging pada aplikasimu.

Sebagai contoh lainnya, gambar di bawah merupakan contoh unit testing yang menggunakan fungsi dari folder utama — ini merupakan project saya — abaikan fungsi-fungsi yang tidak diketahui atau yang berwarna hijau.

Kesimpulan

Pada proses development, selalu ada waktu untuk melakukan testing. Adapun testing yang dilakukan sesudah development, ada juga yang dilakukan pada saat development. Salah satu testing yang dilakukan ketika sedang melakukan pengembangan adalah unit testing. Melalui unit testing, kamu mampu melakukan validasi dari setiap proses berdasarkan setiap testcase yang berkemungkinan terjadi pada aplikasi tersebut. Dengan begitu, kamu dapat mengurangi kemungkinan adanya bug atau error yang ada. Proses pengembangan akan terasa lebih cepat dan nyaman. Kamu tidak lagi harus mencari satu per satu kesalahan yang terjadi.

Sekian. Selamat mencoba dan semoga berhasil …

--

--

Auriga Aristo
Dipantry

4+ years in Backend Developer | PHP, Java/Kotlin, MySQL, Golang | New story every week