Membuat Unit Test di Go

Unit test adalah cara untuk menguji fungsi individu dalam aplikasi, memastikan bahwa setiap bagian dari kode berfungsi dengan benar dan independen dari bagian lainnya. Di Go, membuat unit test mudah dilakukan karena Go memiliki pustaka testing yang mendukung penulisan dan pengelolaan unit test.

Langkah-Langkah Membuat Unit Test

  1. Membuat Fungsi yang Akan Diuji Misalkan kita memiliki fungsi sederhana yang mengembalikan nilai keliling lingkaran berdasarkan jari-jari yang diberikan.

    // File: geometry.go
    package geometry
    
    import "math"
    
    func CircleCircumference(radius float64) float64 {
        return 2 * math.Pi * radius
    }

    Fungsi CircleCircumference menerima jari-jari lingkaran dan mengembalikan nilai kelilingnya.

  2. Menyiapkan File Unit Test File unit test Go diberi akhiran _test.go agar Go secara otomatis mengenalinya sebagai file testing. Untuk fungsi di atas, kita buat file geometry_test.go:

    // File: geometry_test.go
    package geometry
    
    import (
        "testing"
        "math"
    )
    
    func TestCircleCircumference(t *testing.T) {
        radius := 3.0
        expected := 2 * math.Pi * radius
        result := CircleCircumference(radius)
    
        if result != expected {
            t.Errorf("CircleCircumference(%f) = %f; want %f", radius, result, expected)
        }
    }

    Pada fungsi TestCircleCircumference, kita:

    • Menetapkan nilai jari-jari (radius) dan nilai keliling yang diharapkan (expected).

    • Memanggil fungsi CircleCircumference dengan jari-jari tersebut dan menyimpan hasilnya.

    • Memeriksa apakah hasil fungsi sama dengan nilai yang diharapkan menggunakan t.Errorf jika tidak sesuai.

  3. Menjalankan Unit Test Untuk menjalankan unit test, buka terminal dan jalankan perintah:

    go test

    Ini akan mencari semua file _test.go di direktori, mengeksekusi fungsi Test*, dan melaporkan hasilnya.

  4. Menambah Skenario Uji (Optional) Untuk memvalidasi fungsi lebih lanjut, kita bisa menambahkan skenario uji yang lebih beragam dengan tabel uji, yang memungkinkan kita menguji beberapa input dalam satu fungsi.

    func TestCircleCircumference_TableDriven(t *testing.T) {
        tests := []struct {
            radius   float64
            expected float64
        }{
            {0, 0},
            {1, 2 * math.Pi * 1},
            {2, 2 * math.Pi * 2},
            {3.5, 2 * math.Pi * 3.5},
        }
    
        for _, test := range tests {
            result := CircleCircumference(test.radius)
            if result != test.expected {
                t.Errorf("CircleCircumference(%f) = %f; want %f", test.radius, result, test.expected)
            }
        }
    }

    Dalam pendekatan tabel uji:

    • Kita mendefinisikan beberapa kasus uji (tests) dengan radius dan nilai yang diharapkan.

    • Fungsi for menjalankan tes untuk setiap kasus dengan nilai radius dan hasil yang diharapkan, memungkinkan uji yang lebih mendalam.

Cara Menulis Assertion di Go

Dalam contoh di atas, t.Errorf digunakan untuk menunjukkan kesalahan jika hasilnya tidak sesuai dengan ekspektasi. Metode lainnya dalam paket testing termasuk:

  • t.Logf(): untuk mencatat pesan selama uji.

  • t.Fail(): menandai tes sebagai gagal tetapi melanjutkan eksekusi.

  • t.Fatal() atau t.Fatalf(): mencatat pesan dan menghentikan eksekusi tes segera.

Praktik Terbaik dalam Unit Testing di Go

  • Pastikan Fungsi Independen: Unit test harus terisolasi, sehingga tidak bergantung pada fungsi atau sumber daya lain.

  • Uji Nilai Ekstrem: Coba uji batas, misalnya radius nol atau angka sangat besar.

  • Pahami Cakupan Tes: Pertimbangkan untuk menjalankan tes dengan -cover untuk melihat cakupan kode:

    go test -cover

Sumber Referensi

Last updated