Package testing di Golang

๐ง Pendahuluan
Testing adalah bagian penting dari pengembangan software. Dengan menulis *test*, kita bisa memastikan kode berjalan sesuai harapan, menghindari bug, dan memudahkan refactoring.
Golang punya package testing bawaan yang powerful, mudah digunakan, dan terintegrasi langsung dengan perintah go test. Dalam artikel ini, kita akan belajar:
* Struktur dasar fungsi test
* Cara menjalankan test
* Penggunaan t.Error, t.Fatal
* Contoh sub-test dan table-driven test
1. โ๏ธ Struktur Dasar File Test
* File test harus diakhiri dengan _test.go, contoh: math_test.go
* Fungsi test harus diawali dengan Test, contoh: func TestTambah(t *testing.T)
๐ Contoh: File math.go
package mathutil
func Tambah(a, b int) int {
return a + b
}๐งช File Test: math_test.go
package mathutil
import "testing"
func TestTambah(t *testing.T) {
hasil := Tambah(2, 3)
if hasil != 5 {
t.Errorf("Expected 5, got %d", hasil)
}
}2. โถ๏ธ Menjalankan Test
Jalankan perintah:
go testOutput:
PASS
ok mathutil 0.001sUntuk lihat hasil lengkap:
go test -v3. ๐ t.Error vs t.Fatal
| Fungsi | Kegunaan |
|---|---|
t.Error(...) | Melaporkan error, tapi test tetap lanjut |
t.Fatal(...) | Melaporkan error dan langsung hentikan test |
Contoh:
if hasil != 5 {
t.Fatal("Fatal: hasil tidak sesuai")
}4. ๐งช Sub-Test
Cocok untuk mengelompokkan skenario test:
func TestTambah(t *testing.T) {
t.Run("Positif", func(t *testing.T) {
if Tambah(2, 3) != 5 {
t.Error("Gagal tambah positif")
}
})
t.Run("Negatif", func(t *testing.T) {
if Tambah(-2, -3) != -5 {
t.Error("Gagal tambah negatif")
}
})
}5. ๐ Table-Driven Test
Efisien untuk banyak kasus uji:
func TestTambah(t *testing.T) {
tes := []struct {
nama string
a, b, exp int
}{
{"Positif", 2, 3, 5},
{"Negatif", -2, -3, -5},
{"Campur", -2, 3, 1},
}
for _, tc := range tes {
t.Run(tc.nama, func(t *testing.T) {
if hasil := Tambah(tc.a, tc.b); hasil != tc.exp {
t.Errorf("Expected %d, got %d", tc.exp, hasil)
}
})
}
}6. ๐งช Coverage Test
Untuk melihat seberapa banyak kode kita yang sudah di-*test*:
go test -coverUntuk generate laporan HTML:
go test -coverprofile=cover.out
go tool cover -html=cover.out๐ Kesimpulan
* package testing membuat test di Go jadi simple dan terstruktur.
* Kamu cukup buat file _test.go dan fungsi TestXxx.
* Gunakan [t.Run](http://t.Run) untuk sub-test, dan table-driven untuk test banyak kasus.
* Jangan lupa pakai go test -v dan -cover untuk feedback yang lebih jelas.
Article Series
Golang Standard Library
Lanjutkan membaca seri ini untuk melihat perjalanan lengkapnya.
- 1Package fmt di Golang17 Apr 20253 min read
- 2Package errors, os, dan flag di Golang17 Apr 20253 min read
- 3Package strings dan strconv di Golang19 Apr 20253 min read
- 4Mengenal Package io dan bufio di Golang23 Apr 20255 min read
- 5Package testing di Golang24 Apr 20252 min readCurrent article