Tingkatkan Code Quality dengan Unit Testing pada Go

Ramadani
Ramadani
Jul 16, 2018 · 4 min read

Programming is not easy; bahkan programmer terbaik pun tidak selalu mampu menulis program yang bekerja persis seperti yang diharapkan. Oleh karena itu bagian penting pada proses pengembangan perangkat lunak adalah pengujian. Menulis tests adalah cara yang baik untuk memastikan kualitas dan meningkatkan reliability pada code yang kita buat. Terdapat beberapa jenis pengujian pada proses pengembangan perangkat lunak, salah satunya adalah Unit Testing.

Unit Testing adalah sebuah level pengujian perangkat lunak dimana unit-unit individu atau komponen-komponen dari sebuah perangkat lunak diuji. Sebuah unit adalah bagian terkecil yang dapat diuji dari perangkat lunak, biasanya memiliki satu atau beberapa input dan biasanya juga hanya memiliki satu output yang dihasilkan. Dalam object-oriented programming, unit terkecil adalah sebuah method, yang mungkin dimilik oleh base/super class, abstract class atau child class.


Unit Testing pada Go

Membuat Unit Testing dengan Go sangat mudah. By default kamu tidak perlu menginstall tools yang diperlukan untuk membuat dan menjalankan testing, karena Go sudah memiliki package testing yang ada didalamnya dan sebuah built-in testing command yang disebut go test untuk menjalankan tests yang telah dibuat.

Menulis Tests

Mari kita mulai dengan menggunakan contoh lingkaran, pada lingkaran kita dapat mencari panjang diameter, luas, dan kelilingnya. Berikut contoh code yang akan kita gunakan untuk membuat unit testing.

Kemudian kita buat test untuk menguji code yang telah dibuat sebelumnya pada file yang terpisah. File test dapat berada pada package (circle) yang sama atau pada package (dan folder) yang berbeda. Dibawah ini merupakan unit testing untuk menguji luas lingkaran:

Pada test function yang kita tulis memiliki karakteristik yaitu:

  • Hanya memiliki 1 parameter bertipe *testing.T, dengan parameter tersebut kita bisa mengakses method-method untuk keperluan testing.
  • Dimulai dengan kata Test lalu diikuti oleh kata atau phrase yang menunjukkan apa yang dilakukan pada pengujian tersebut dan dimulai dengan huruf besar. Contoh pada test tersebut adalah TestArea.
  • Memanggil t.Error atau t.Fail untuk mengindikasikan sebuah kesalahan yang terjadi.
  • Dapat menggunakan t.Log untuk melakukan debugging atau melihat informasi dari suatu nilai yang ada pada test.
  • Harus disimpan pada file dengan suffix _test.go, misal circle_test.go.

Menjalankan Tests

Untuk menjalankan tests sebuah package yang telah dibuat, terdapat 2 cara yaitu:

  • Dalam folder yang sama

Cara ini menjalankan file apapun yang cocok dengan packagename_test.go pada folder yang diarahkan.

  • Berdasarkan package

Menjalankan test dengan path dimana package itu berada. Misal:

Untuk melihat lebih detail output yang dihasilkan pada pengujian, kamu bisa menambahkan argumen -v dibelakang test command

atau

Output ketika terjadi kesalahan

Test Coverage

In computer science, test coverage is a measure used to describe the degree to which the source code of a program is executed when a particular test suite runs. A program with high test coverage, measured as a percentage, has had more of its source code executed during testing, which suggests it has a lower chance of containing undetected software bugs compared to a program with low test coverage. — Wikipedia

Test Coverage bertujuan untuk mengukur berapa banyak code yang diuji. Pada go test tool telah memiliki built-in code-coverage sehingga untuk menggunakannya kita hanya tinggal menambahkan -cover pada test command.

Bisa dilihat nilai dari test coverage yang dihasilkan adalah 33.3%, karena pada test yang dibuat kita hanya menguji untuk method Area() saja. Coba kita tambahkan test untuk method lainnya.

Kemudian kita jalankan lagi test command seperti sebelumnya

Dengan membuat test untuk method lainnya maka hasilnya 100.0%. Tapi test coverage tidak menjamin bahwa tests yang kita buat benar, karena nilai metrik yang dihasilkan dapat menyebabkan misleading. Kita perlu memastikan bahwa kita tidak hanya mengeksekusi code yang ada, tetapi kita lakukan verifikasi behaviour dan nilai output serta membuat test yang beragam.

Kesimpulan

Untuk membuat testing, di Go sudah terdapat package testing dan go test command yang dapat memudahkanmu untuk memulai membuat testing karena tidak perlu lagi menginstallnya. Di Go juga sudah ada package testing lain, salah satunya testify yang dapat kamu install menggunakan go get.

Manfaat dengan adanya unit testing dapat meningkatkan keyakinan pada perubahan maupun maintaining code. Jika unit test ditulis dengan baik dan jika itu dijalankan setiap kali terdapat perubahan pada code, kita akan dapat segera menemukan setiap defects yang diperlihatkan karena adanya perubahan pada code. code yang ditulis juga akan lebih reusable karena untuk membuat unit test, code yang dibuat harus modular. Selain itu juga dengan adanya unit test, proses development bisa lebih cepat dan cost yang dikeluarkan untuk memperbaiki defects bisa dikurangi.

Referensi

Ramadani

Written by

Ramadani

Full-stack Engineer | Android (Kotlin) Developer | https://ramadani.id

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade