Menguji API dengan httptest

Memahami httptest.NewRequest, NewRecorder, dan ServeHTTP, lalu menulis pengujian otomatis untuk handler.

Part 14 dari 17 ± 35 menit Gratis

Kenapa perlu menguji?

Setiap kali kamu mengubah kode, bagaimana memastikan endpoint lama tidak rusak? Mengetik curl berulang kali melelahkan. Dengan pengujian otomatis, satu perintah go test mengecek semuanya dalam hitungan detik.

Tiga alat dari net/http/httptest

Selama ini kamu sudah memakai ketiganya lewat fungsi call. Sekarang kita bedah:

AlatFungsi
httptest.NewRequest(method, path, body)Membuat request palsu (tanpa jaringan)
httptest.NewRecorder()Membuat penampung jawaban yang menyimpan status, header, dan body
handler.ServeHTTP(rec, req)Menjalankan handler dengan request itu, hasilnya masuk ke rec

Setelah dijalankan: rec.Code berisi status code, rec.Body.String() berisi isi jawaban, rec.Header() berisi header.

Bentuk file pengujian sungguhan

Di komputermu, simpan sebagai main_test.go (akhiran _test.go wajib) lalu jalankan go test:

func TestPing(t *testing.T) {
    req := httptest.NewRequest("GET", "/ping", nil)
    rec := httptest.NewRecorder()

    Ping(rec, req)

    if rec.Code != http.StatusOK {
        t.Errorf("status = %d, mau %d", rec.Code, http.StatusOK)
    }
    if rec.Body.String() != "pong" {
        t.Errorf("body = %q, mau %q", rec.Body.String(), "pong")
    }
}
  • Nama fungsi diawali Test dan menerima t *testing.T.
  • t.Errorf menandai pengujian gagal dengan pesan, tetapi pengujian tetap berlanjut.

Di kotak latihan

Kotak latihan menjalankan program biasa (bukan go test), jadi kita membuat fungsi bantu doRequest dan mencetak PASS/FAIL sendiri. Intinya sama: kirim request palsu, bandingkan hasil dengan harapan.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X