0Pricing
Go Academy · Lezione

Test basati su tabelle

Test parametrizzati con sottotest

Test basati su tabelle è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Cosa sono i test basati su tabelle?

I test basati su tabelle definiscono una slice di casi di test (input e output attesi) e la percorrono con un unico corpo di test. Riducono la duplicazione e rendono semplicissimo aggiungere nuovi casi.

Schema di base

Definisca una struct per ogni caso, esegua un ciclo con t.Run e segnali i fallimenti utilizzando il nome del caso:

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 di struct anonime

Utilizzi una struct anonima per il tipo dei casi di test: mantiene la definizione dei casi vicino al test ed evita di assegnare un nome a un tipo utilizzato una sola volta.

Includere i casi di errore

Aggiunga un campo wantErr bool per verificare che le funzioni restituiscano errori negli scenari previsti:

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

Denominare i sottotest

Un campo con un nome descrittivo rende i fallimenti autoesplicativi. Può eseguire un caso specifico con -run TestFunc/case_name.

Sottotest paralleli con t.Run

Contrassegni ogni sottotest come parallelo e catturi la variabile del ciclo per eseguire i casi contemporaneamente, una pratica importante quando i test sono vincolati dall'I/O.

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

Configurazione condivisa per caso

Utilizzi campi funzione tt.setup per consentire una configurazione specifica per ogni caso senza duplicare il codice di base:

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

Mantenere leggibili i casi

Se i casi diventano molto grandi, li definisca come variabili denominate oppure li carichi da file testdata. Mantenga la tabella compatta: quando possibile, utilizzi una riga per caso.

Testare più output

Nei test basati su tabelle, verifichi le funzioni che restituiscono più valori aggiungendo un campo per ogni output:

type tc struct {
    input     string
    wantVal   int
    wantErr   bool
}

Testify assert nelle tabelle

Utilizzi github.com/stretchr/testify/assert nei test basati su tabelle per ottenere asserzioni leggibili senza blocchi if/t.Errorf verbosi.

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

Documentare con i casi

La tabella dei casi funge da documentazione vivente. I futuri sviluppatori possono consultarla per comprendere a colpo d'occhio tutti gli input supportati e i casi limite.

Verifica rapida

Perché si cattura la variabile del ciclo (tt := tt) prima di t.Parallel nei test basati su tabelle?

Riepilogo: test basati su tabelle

Punti chiave:

  • Slice di struct che copre input, output attesi e indicatore di errore
  • Ciclo con t.Run per sottotest denominati e indipendenti
  • Cattura della variabile del ciclo (tt := tt) prima di t.Parallel
  • I casi fungono da documentazione vivente dei comportamenti supportati

Domande Frequenti

La lezione «Test basati su tabelle» è gratuita?

Sì — il testo completo di «Test basati su tabelle» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Test basati su tabelle»?

Test parametrizzati con sottotest Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Test basati su tabelle»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Scrivere test unitari con testing
  2. Test basati su tabelle
  3. Test double: mock e stub
  4. Copertura dei test e testify
← Torna a Go Academy