Copertura dei test e testify
go test -cover e la libreria di asserzioni testify
Copertura dei test e testify è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 4 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.
go test -cover
Aggiunga -cover a qualsiasi comando go test per visualizzare la percentuale di copertura per ogni package.
go test -cover ./...
// ok myapp 68.4% of statementsProfilo di copertura
Generi un file con il profilo di copertura e lo visualizzi in HTML per vedere quali righe sono coperte:
go test -coverprofile=c.out ./...
go tool cover -html=c.out -o coverage.htmlSoglie di copertura in CI
Imposti una copertura minima con un comando shell su una riga:
pct=$(go test -cover ./... | awk '/coverage/ {gsub(/%/,""); print $NF}')
[ "${pct%.*}" -ge 80 ] || { echo "Coverage $pct% below 80%"; exit 1; }Il 100% di copertura non è l'obiettivo
La copertura misura quali righe vengono eseguite, non se le asserzioni sono significative. Miri a una copertura elevata nei percorsi critici e accetti una copertura inferiore nei rami di errore irraggiungibili.
testify/assert
github.com/stretchr/testify/assert fornisce asserzioni leggibili che riportano automaticamente i valori atteso ed effettivo:
assert.Equal(t, 42, result)
assert.NoError(t, err)
assert.Contains(t, list, "item")
assert.True(t, isValid)testify/require
require è identico a assert, ma in caso di fallimento chiama t.FailNow() e interrompe immediatamente il test, come t.Fatal.
require.NoError(t, err) // stop if err != nil
// Subsequent code only runs if err is niltestify/suite
testify/suite raggruppa test correlati in una struct con configurazione e pulizia condivise, in modo simile alle suite di test xUnit:
type UserSuite struct { suite.Suite; db *DB }
func (s *UserSuite) SetupTest() { s.db = openTestDB() }
func (s *UserSuite) TestCreate() { /* ... */ }
func TestUserSuite(t *testing.T) { suite.Run(t, new(UserSuite)) }assert.ElementsMatch
Confronti le slice senza considerare l'ordine:
assert.ElementsMatch(t, []int{3,1,2}, []int{1,2,3})assert.JSONEq
Confronti le stringhe JSON indipendentemente dall'ordine delle chiavi:
assert.JSONEq(t, `{"a":1,"b":2}`, `{"b":2,"a":1}`)Asserzioni personalizzate
Racchiuda testify nei propri helper di asserzione per aggiungere contesto di dominio ai messaggi di errore:
func assertUserValid(t testing.TB, u *User) {
t.Helper()
assert.NotEmpty(t, u.Name)
assert.Positive(t, u.ID)
}Combinare la copertura con testify
testify non influisce sui report di copertura: la copertura considera solo che le righe vengano eseguite, indipendentemente dalla libreria di asserzioni utilizzata.
Verifica rapida
Qual è la differenza tra testify/assert e testify/require?
Riepilogo: copertura e testify
Punti chiave:
- go test -cover; -coverprofile per il report HTML
- assert: continua in caso di errore; require: interrompe in caso di errore
- testify/suite per test raggruppati con inizializzazione condivisa
- Una copertura elevata è positiva; asserzioni significative sono migliori
Domande Frequenti
La lezione «Copertura dei test e testify» è gratuita?
Sì — il testo completo di «Copertura dei test e testify» è 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 «Copertura dei test e testify»?
go test -cover e la libreria di asserzioni testify 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 4 di 4.
Quanto tempo richiede la lezione «Copertura dei test e testify»?
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
- Scrivere test unitari con testing
- Test basati su tabelle
- Test double: mock e stub
- Copertura dei test e testify