0Pricing
Go Academy · Lezione

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 statements

Profilo 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.html

Soglie 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 nil

testify/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

  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