Tablo testi
- Go kursu
- Orta seviye
- Ders 43/80
- 4 dk
Tablo tabanlı test desenini öğrenirsin.
Tablo testi
Go'nun en yaygın test deseni: girdi ve beklenen çıktıları bir dilimde tutup tek döngüyle denemek.
tests := []struct {
ad string
a, b int
want int
}{
{"pozitif", 2, 3, 5},
{"negatif", -2, -3, -5},
{"sıfır", 0, 0, 0},
}
for _, tt := range tests {
t.Run(tt.ad, func(t *testing.T) {
if got := Topla(tt.a, tt.b); got != tt.want {
t.Errorf("got %d, want %d", got, tt.want)
}
})
}Yeni durum eklemek ucuzdur
Bir hata bildirildiğinde onu yakalayan yeni bir satır tabloya eklenir; test kodu değişmez. Kenar durumlarını (boş girdi, sınır değerleri, Unicode) unutmamak için tablo iyi bir kontrol listesidir. go test -run 'TestTopla/negatif' yalnızca o alt testi çalıştırır.
Uygulama Tablo döngüsü
Mutlak(n int) int yaz. {-3, 3}, {0, 0}, {4, 4} durumlarından oluşan anonim struct tablosunu döngüyle dene; geçen durum sayısını yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func Mutlak(n int) int {
if n < 0 {
return -n
}
return n
}
func main() {
tests := []struct{ in, want int }{{-3, 3}, {0, 0}, {4, 4}}
gecen := 0
for _, tt := range tests {
if Mutlak(tt.in) == tt.want {
gecen++
}
}
fmt.Println(gecen)
}Beklenen çıktı
3
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Tablo testinde <code>t.Run</code> kullanmanın avantajı nedir?
- Testler daha hızlı derlenir
- Hata mesajı gerekmez
- Kapsama artar
- Her durum ayrı alt test olarak raporlanır ve -run ile tek tek çalıştırılabilir Doğru cevap
Açıklama: Alt test adları çıktıda görünür (TestTopla/negatif); bir durum Fatal olsa bile diğerleri çalışmaya devam eder.
2 Alt test
for _, tt := range tests {
t.____(tt.ad, func(t *testing.T) {
// ...
})
}
for _, tt := range tests {
t.Run(tt.ad, func(t *testing.T) {
// ...
})
}
Açıklama: t.Run verilen adla bir alt test başlatır.
3 Tablo parçası
| Kavram | Anlamı |
|---|---|
ad |
Alt test adı |
girdi alanları |
Fonksiyona verilenler |
want |
Beklenen sonuç |
t.Run |
Ayrı raporlama |