Beberapa bulan terakhir ini saya lg mencoba hal baru, belajar bahasa pemrograman baru yang sedang naik daun dan kekinian, yupzz, Golang. Bagaimana impresinya? Susah-susah gampang sih, hahaha. Berbeda paradigma, sejauh saya mencoba, gak ada OOP disini (atau saya aja yang belum tau :D). Kalo saya ditanya, apa sih Golang itu? Golang itu menurut saya bahasa pemrograman static typing yang sebagaian besar hanya diisi struct dan interface. Awal-awalnya sih memang lumayan bingung, ini maksudnya kayak gimana, tapi kalo sudah tau sdikit alurnya, saya rasa akan sangat mengasikkan untuk ngoding dengan Golang ini. Seakan-akan udah gak mau balik lagi ke bahasa pemrograman yang sebelumnya :D.
Golang ini sangat lengkap menurut saya, contohnya sudah tersedia package http yang sangat powerful. Tersedia juga package untuk melakukan unit testing. Pokoknya lengkap deh :D. Kali ini saya mau berbagi sedikit cara untuk melakukan unit testing di Golang.
Cukup sederhana untuk membuat file unit test di Golang, hanya dengan membuat sebuah file dengan suffix “_test.go”, Golang akan mengenali ini sebagai sebuah file unit test. Kemudian buat mekanisme test di dalamnya, bisa dengan 1 contoh data atau multiple data yang di dokumentasinya disebut dengan Table Driven Unit Tests. Dengan Table Driven Unit Tests, kita mencoba untuk melakukan pengujian dengan berbagai skenario data yang kita simpan di dalam anonymous struct. Dan kemudian mulai mencobanya satu-persatu di dalam skenario pengujian. Yuk langsung ke code nya aja 😀
package main import ( "fmt" ) func main() { percent := Percent(25, 2000) fmt.Println(percent) percentOf := PercentOf(1000, 2000) fmt.Println(percentOf) } func Percent(pcent int, all int) float64 { percent := ((float64(all) * float64(pcent)) / float64(100)) return percent } func PercentOf(current int, all int) float64 { percent := (float64(current) * float64(100)) / float64(all) return percent }
Ada 2 method/function yang akan kita uji dengan unit test. Buat file baru dengan nama percentage_test.go, disini kita akan menulis mekanisme pengujiannya.
package main import ( "strconv" "testing" ) func TestPercent(t *testing.T) { var dataSet = []struct { pcent int all int wantResult float64 }{ { pcent: 30, all: 300, wantResult: 90, }, { pcent: 40, all: 500, wantResult: 200, }, { pcent: 70, all: 1200, wantResult: 840, }, } for _, tt := range dataSet { actual := Percent(tt.pcent, tt.all) if actual != tt.wantResult { t.Fatalf("Percent : want %d got %d", strconv.FormatFloat(tt.wantResult, 'f', 6, 64), strconv.FormatFloat(actual, 'f', 6, 64)) } } } func TestPercentOf(t *testing.T) { var dataSet = []struct { current int all int wantResult float64 }{ { current: 1000, all: 4000, wantResult: 25, }, { current: 240, all: 1200, wantResult: 20, }, { current: 600, all: 2400, wantResult: 25, }, } for _, tt := range dataSet { actual := PercentOf(tt.current, tt.all) if actual != tt.wantResult { t.Fatalf("PercentOf : want %d got %d", strconv.FormatFloat(tt.wantResult, 'f', 6, 64), strconv.FormatFloat(actual, 'f', 6, 64)) } } }
Saya mencoba memasukkan masing-masing 3 contoh data untuk menguji setiap method/function. Dan untuk menjalankan test, cukup dengan go test. Sangat sederhana sekali kan :D.