go test în Go

Compilează și rulează testele (fișierele _test.go) și raportează ce a trecut și ce a picat.

Sintaxă
go test                     # pachetul curent
go test ./...               # tot modulul
go test -v -run TestNume ./pachet
go test -cover ./...
go test -race ./...
go test -bench . ./pachet

Ce face go test

go test găsește fișierele _test.go din pachetele date, le compilează împreună cu pachetul și rulează funcțiile TestXxx, ExampleXxx și, la cerere, BenchmarkXxx. Pentru fiecare pachet afișează ok sau FAIL, iar comanda iese cu cod nenul dacă un test a picat (util în CI).

Înainte de teste, go test rulează automat o parte din verificările lui go vet. Rezultatele testelor care au trecut sunt păstrate în cache: dacă nimic nu s-a schimbat, apare (cached); -count=1 forțează rularea din nou.

Parametri

Parametru Descriere
-v Afișează fiecare test și subtest, nu doar rezumatul.
-run regex Rulează doar testele al căror nume se potrivește (-run 'TestReducere/zece').
-cover Afișează procentul de cod acoperit de teste; -coverprofile=c.out salvează detaliile.
-race Rulează testele cu detectorul de data race.
-bench regex Rulează și benchmark-urile potrivite (. = toate).
-count n Rulează fiecare test de n ori; -count=1 ocolește cache-ul.

Exemple

Exemplul 1: Toate testele din modul și acoperirea

go test ./...
go test -cover ./preturi

Rezultat în terminal

?   	exemplu.ro/magazin	[no test files]
ok  	exemplu.ro/magazin/preturi	0.267s
ok  	exemplu.ro/magazin/preturi	0.241s	coverage: 100.0% of statements

Exemplul 2: Un singur subtest, în detaliu

Spațiile din numele subtestelor devin _; -run acceptă Test/subtest.

go test -v -run 'TestReducere/zece' ./preturi

Rezultat în terminal

=== RUN   TestReducere
=== RUN   TestReducere/zece_la_sută
--- PASS: TestReducere (0.00s)
    --- PASS: TestReducere/zece_la_sută (0.00s)
PASS
ok  	exemplu.ro/magazin/preturi	0.122s

Exemplul 3: Rezultat din cache și rulare forțată

go test ./preturi
go test ./preturi
go test -count=1 ./preturi

Rezultat în terminal

ok  	exemplu.ro/magazin/preturi	0.236s
ok  	exemplu.ro/magazin/preturi	(cached)
ok  	exemplu.ro/magazin/preturi	0.229s

Greșeli frecvente

  • go test în rădăcina modulului crezând că rulează tot: testează doar pachetul curent. Folosește go test ./....
  • Teste care depind de ordinea în care rulează sau de fișiere lăsate de alt test: fiecare test trebuie să fie independent (t.TempDir() pentru fișiere).
  • Ignorarea lui (cached) când testele depind de lucruri din afara codului (fișiere, rețea): adaugă -count=1.

Comenzi înrudite

  • teste (testing): Testele Go stau în fișiere _test.go, în funcții TestXxx(t *testing.T), și se rulează cu go test.
  • go vet: Analizează codul și semnalează greșeli probabile pe care compilatorul le acceptă: formate Printf greșite, copieri de mutex etc.
  • go build: Compilează pachetele și, pentru pachetul main, creează un executabil de sine stătător.