0Pricing
Go Academy · Pelajaran

Pengujian Berbasis Tabel

Pengujian berparameter dengan subpengujian

Pengujian Berbasis Tabel adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Apa itu pengujian berbasis tabel?

Pengujian berbasis tabel menentukan daftar kasus pengujian (masukan dan keluaran yang diharapkan) lalu melakukan perulangan atasnya dengan satu isi pengujian. Cara ini mengurangi duplikasi dan memudahkan penambahan kasus.

Pola dasar

Tentukan struktur untuk setiap kasus, lakukan perulangan dengan t.Run, dan laporkan kegagalan menggunakan nama kasus:

tests := []struct {
    name  string
    input int
    want  int
}{
    {"zero", 0, 0},
    {"positive", 3, 9},
    {"negative", -2, 4},
}
for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        got := Square(tt.input)
        if got != tt.want {
            t.Errorf("Square(%d) = %d; want %d", tt.input, got, tt.want)
        }
    })
}

Daftar struktur anonim

Gunakan struktur anonim sebagai tipe kasus pengujian—cara ini menjaga definisi kasus tetap dekat dengan pengujian dan menghindari penamaan tipe yang hanya digunakan sekali.

Menyertakan kasus kesalahan

Tambahkan bidang wantErr bool untuk menguji bahwa fungsi mengembalikan kesalahan dalam skenario yang diharapkan:

{"invalid input", -1, 0, true},
// in the loop:
if (err != nil) != tt.wantErr {
    t.Errorf("wantErr %v, got err %v", tt.wantErr, err)
}

Menamai subpengujian

Bidang nama yang deskriptif membuat kegagalan dapat dipahami tanpa penjelasan tambahan. Anda dapat menjalankan kasus tertentu dengan -run TestFunc/case_name.

Subpengujian paralel dengan t.Run

Tandai setiap subpengujian sebagai paralel dan simpan variabel perulangan untuk menjalankan kasus secara bersamaan (penting ketika pengujian terikat pada operasi masukan/keluaran).

for _, tt := range tests {
    tt := tt // capture
    t.Run(tt.name, func(t *testing.T) {
        t.Parallel()
        // ...
    })
}

Penyiapan bersama per kasus

Gunakan bidang fungsi tt.setup agar penyiapan per kasus dapat dilakukan tanpa menggandakan kode rutin:

type tc struct {
    setup func() *DB
    input string
    want  int
}

Menjaga keterbacaan kasus

Jika kasus menjadi besar, tentukan sebagai variabel bernama atau muat dari berkas data pengujian. Jaga agar tabel tetap ringkas—sebisa mungkin satu baris untuk setiap kasus.

Menguji beberapa keluaran

Uji fungsi yang mengembalikan beberapa nilai dalam tabel dengan menambahkan satu bidang untuk setiap keluaran:

type tc struct {
    input     string
    wantVal   int
    wantErr   bool
}

Penegasan Testify dalam tabel

Gunakan github.com/stretchr/testify/assert dalam pengujian berbasis tabel untuk penegasan yang mudah dibaca tanpa blok if/t.Errorf yang panjang.

assert.Equal(t, tt.want, got, tt.name)

Mendokumentasikan dengan kasus

Tabel kasus berfungsi sebagai dokumentasi yang terus hidup. Pengembang di masa mendatang dapat membacanya untuk memahami semua masukan yang didukung dan kasus batas secara sekilas.

Pemeriksaan Singkat

Mengapa Anda menyimpan variabel perulangan (tt := tt) sebelum t.Parallel dalam pengujian berbasis tabel?

Ringkasan: Pengujian Berbasis Tabel

Poin penting:

  • Daftar struktur yang mencakup masukan, keluaran yang diharapkan, dan penanda kesalahan
  • Lakukan perulangan dengan t.Run untuk subpengujian bernama yang independen
  • Simpan variabel perulangan (tt := tt) sebelum t.Parallel
  • Kasus berfungsi sebagai dokumentasi yang terus hidup tentang perilaku yang didukung

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengujian Berbasis Tabel” gratis?

Ya — teks lengkap “Pengujian Berbasis Tabel” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pengujian Berbasis Tabel”?

Pengujian berparameter dengan subpengujian Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Pengujian Berbasis Tabel” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menulis Pengujian Unit dengan testing
  2. Pengujian Berbasis Tabel
  3. Pengganti Pengujian: Mock dan Stub
  4. Cakupan Pengujian dan testify
← Kembali ke Go Academy