Pada modul ini kita akan membuat CLI application sederhana yang menentukan apakah suatu angka adalah bilangan prima. Kemudian kita buat program testnya.
Buat direktori untuk menyimpan project, pada tutorial digunakan direktori primeapp. Kemudian pada direktori tersebut jalankan perintah init, pada tutorial digunakan nama aplikasi primeapp.
$ go mod init primeapp
Selanjutnya buat file main.go, masukan kode berikut
package main import "fmt" func main() { n := 4 _, msg := isPrime(n) fmt.Println(msg) } func isPrime(n int) (bool, string) { if n == 0 || n == 1 { return false, fmt.Sprintf("%d is not prime", n) } if n < 0 { return false, "negative is not prime" } for i := 2; i <= n/2; i++ { if n%i == 0 { return false, fmt.Sprintf("%d is not prime because is divisible by %d", n, i) } } return true, fmt.Sprintf("%d is prime number", n) }
Lalu pada direktori yang sama, buat file test dengan aturan *_test.go, pada tutorial digunakan main_test.go.
Test dalam Go adalah function, dan perlu harus menggunakan konvensi penamaan:
- Nama fungsi diawali kata Test.
- Setelah kata Test, boleh ditulis apa saja kecual lower case.
Disini kami gunakan nama fungsi test adalah Test_isPrime.
Berikut isi main_test.go
package main import "testing" func Test_isPrime(t *testing.T) { result, msg := isPrime(0) if result { t.Errorf("with %d as test parameter, got true, but expected false", 0) } if msg != "0 is not prime" { t.Error("wrong message returned: ", msg) } }
Untuk menjalankan test, pada command prompt, masuk ke direktori aplikasi lalu jalankan perintah berikut:
$ go test .
Jika fungsi test yang dibuat sudah benar, maka kita akan mendapatkan return
ok primeapp (cached)
Jika diperlukan message yang lebih detail, gunakan opsi -v
$ go test -v .
=== RUN Test_isPrim
--- PASS: Test_isPrim (0.00s)
PASS
ok primeapp 0.834s
Sampai disini kita sudah membuat fungsi test sederhana. Namun jika diperhatikan, test diatas akan baru mencakup pemeriksaan untuk angka 0 saja. Jika Kita perlu memeriksa angka lain, kode akan menjadi redundan. Lihat contoh dibawah:
package main import "testing" func Test_isPrime(t *testing.T) { //test 0 result, msg := isPrime(0) if result { t.Errorf("with %d as test parameter, got true, but expected false", 0) } if msg != "0 is not prime" { t.Error("wrong message returned: ", msg) } result, msg = isPrime(7) if !result { t.Errorf("with %d as test parameter, got false, but expected true", 7) } if msg != "7 is prime number" { t.Error("wrong message returned: ", msg) } }
Untuk mengatasi masalah diatas, kita akan bahas penggunaan table test pada modul berikutnya.