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
- Menulis Pengujian Unit dengan testing
- Pengujian Berbasis Tabel
- Pengganti Pengujian: Mock dan Stub
- Cakupan Pengujian dan testify