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ștego 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.