CodeBlanks Logo Icon CodeBlanks

Özet - Test

Tablo testi ve yardımcıları birleştirerek bir matematik testi yazarsın.

Test özeti

Go test araç kutusu: _test.go dosyaları, TestXxx(t *testing.T), t.Errorf/t.Fatalf, tablo testleri + t.Run, t.Helper/t.Cleanup/t.TempDir, ExampleXxx + // Output:. Komut satırında -run, -v, -race, -cover.

Bağımlılıkları arayüzle almak (ör. io.Writer, repository arayüzü) kodu sahte nesnelerle test etmeyi kolaylaştırır.

Fuzz test örneği

Fuzz testi, "her girdide doğru olması gereken" bir özelliği denetler:

func FuzzTersCevir(f *testing.F) {
    f.Add("merhaba")
    f.Fuzz(func(t *testing.T, s string) {
        if Ters(Ters(s)) != s {
            t.Errorf("çift ters %q != %q", Ters(Ters(s)), s)
        }
    })
}

Bulunan başarısız girdiler testdata/fuzz/ altına kaydedilir ve sonraki normal testlerde de çalışır.

Uygulama Özellik testi

Ters(s string) string fonksiyonunu rune'larla yaz. "gopher", "çğü" ve "" girdileri için Ters(Ters(s)) == s özelliğinin hepsinde doğru olduğunu yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

func Ters(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}

func main() {
    hepsi := true
    for _, s := range []string{"gopher", "çğü", ""} {
        if Ters(Ters(s)) != s {
            hepsi = false
        }
    }
    fmt.Println(hepsi)
}

Beklenen çıktı

true

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Go 1.18 ile gelen <code>FuzzXxx</code> testleri ne yapar?

  • Rastgele üretilen girdilerle hata arar Doğru cevap
  • Testleri paralel çalıştırır
  • Kapsamı ölçer
  • Benchmark yapar

Açıklama: go test -fuzz=FuzzParse, verilen tohumlardan yeni girdiler türetip panic veya başarısız kontrol bulmaya çalışır.

2 Tohum ekle

Soru
func FuzzParse(f *testing.F) {
    f.____("42")
    f.Fuzz(func(t *testing.T, s string) { Parse(s) })
}
Cevap
func FuzzParse(f *testing.F) {
    f.Add("42")
    f.Fuzz(func(t *testing.T, s string) { Parse(s) })
}

Açıklama: f.Add fuzz motoruna başlangıç girdisi (tohum) verir.

3 Test türü

Kavram Anlamı
TestXxx Birim test
ExampleXxx Belge + test
BenchmarkXxx Performans ölçümü
FuzzXxx Rastgele girdi

Orta seviye bölümündeki tüm dersler