Go Academy · Lektion

Teststyrede tests

Parameteriserede tests med subtests

Lektion 2 af 413 trin

Teststyrede tests er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad er tabelbaserede test?

Tabelbaserede test definerer en slice med testtilfælde (input og forventet output) og gennemløber den med én enkelt testkrop. De reducerer gentagelser og gør det enkelt at tilføje tilfælde.

Grundlæggende mønster

Definér en struktur for hvert tilfælde, gennemløb den med t.Run, og rapportér fejl med navnet på tilfældet:

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)
        }
    })
}

Slice med anonym struktur

Brug en anonym struktur som type for testtilfældet — så forbliver definitionen af tilfældet tæt på testen, og du undgår at navngive en type, der kun bruges én gang.

Inkludering af fejltilfælde

Tilføj et wantErr bool-felt for at teste, at funktioner returnerer fejl i de forventede scenarier:

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

Navngivning af underordnede test

Et beskrivende navnefelt gør fejl selvforklarende. Du kan køre et bestemt tilfælde med -run TestFunc/case_name.

Parallelle underordnede test med t.Run

Markér hver underordnet test som parallel, og gem løkkevariablen for at køre tilfældene samtidigt (vigtigt, når test er I/O-begrænsede).

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

Fælles opsætning pr. tilfælde

Brug tt.setup-funktionsfelter til at tillade opsætning pr. tilfælde uden at duplikere standardkode:

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

Sådan holdes tilfældene læselige

Hvis tilfældene bliver store, kan du definere dem som navngivne variabler eller indlæse dem fra testdatafiler. Hold tabellen kompakt — om muligt én linje pr. tilfælde.

Test af flere resultater

Tabellér testfunktioner, der returnerer flere værdier, ved at tilføje ét felt pr. resultat:

type tc struct {
    input     string
    wantVal   int
    wantErr   bool
}

Testify-assertioner i tabeller

Brug github.com/stretchr/testify/assert i tabelbaserede test for læselige kontroller uden udførlige if/t.Errorf-blokke.

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

Dokumentation med tilfælde

Tabellen med tilfælde fungerer som levende dokumentation. Fremtidige udviklere kan hurtigt læse den for at forstå alle understøttede input og kanttilfælde.

Hurtig kontrol

Hvorfor gemmer du løkkevariablen (tt := tt), før du bruger t.Parallel i tabelbaserede test?

Opsummering: Tabelbaserede test

Vigtige punkter:

  • Slice med strukturer, der dækker input, forventede resultater og et fejllogisk felt
  • Gennemløb med t.Run for navngivne, uafhængige underordnede test
  • Gem løkkevariablen (tt := tt), før du bruger t.Parallel
  • Tilfældene fungerer som levende dokumentation af understøttet funktionalitet
Gratis at komme i gang

Lær Go med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Teststyrede tests” gratis?

Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Teststyrede tests”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Teststyrede tests”?

Parameteriserede tests med subtests Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Go Academy?

Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Teststyrede tests”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Go Academy-lektion?

Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Skrivning af unit tests med testing
  2. Teststyrede tests
  3. Test doubles: Mocks og stubs
  4. Testdækning og testify
← Tilbage til Go Academy