Ce face testing.T.Parallel
Implicit testele unui pachet rulează unul după altul. t.Parallel(), apelat la începutul unui test sau subtest, îl pune în așteptare (PAUSE) până se termină testele obișnuite; apoi testele paralele rulează împreună (CONT). Numărul maxim simultan este dat de opțiunea -parallel (implicit numărul de procesoare).
Merită pentru teste care așteaptă (rețea, disc, time.Sleep) sau sunt independente și lente. Testele paralele nu au voie să modifice date comune fără sincronizare și nu pot folosi t.Setenv sau t.Chdir.
Ce returnează
Nimic.
Exemple
Exemplul 1: Subteste paralele
Fiecare subtest așteaptă 300 ms; rulând în paralel, testul durează aproximativ 0,3 s în loc de 0,9 s.
// fișierul curs_test.go
package magazin
import (
"testing"
"time"
)
func cursValutar(moneda string) float64 {
time.Sleep(300 * time.Millisecond) // simulăm o cerere lentă
return map[string]float64{"EUR": 4.97, "USD": 4.58, "GBP": 5.81}[moneda]
}
func TestCursValutar(t *testing.T) {
for _, moneda := range []string{"EUR", "USD", "GBP"} {
t.Run(moneda, func(t *testing.T) {
t.Parallel()
if cursValutar(moneda) <= 0 {
t.Errorf("curs lipsă pentru %s", moneda)
}
})
}
}
Rezultatul în terminal (timpii diferă la fiecare rulare)
$ go test -v
=== RUN TestCursValutar
=== RUN TestCursValutar/EUR
=== PAUSE TestCursValutar/EUR
=== RUN TestCursValutar/USD
=== PAUSE TestCursValutar/USD
=== RUN TestCursValutar/GBP
=== PAUSE TestCursValutar/GBP
=== CONT TestCursValutar/EUR
=== CONT TestCursValutar/GBP
=== CONT TestCursValutar/USD
--- PASS: TestCursValutar (0.00s)
--- PASS: TestCursValutar/USD (0.30s)
--- PASS: TestCursValutar/GBP (0.30s)
--- PASS: TestCursValutar/EUR (0.30s)
PASS
ok magazin 0.593s
Greșeli frecvente
- Testele paralele scriu în aceeași variabilă globală sau în același fișier. Rezultatul depinde de ordinea întâmplătoare; rulează cu
go test -raceca să găsești problema. - Folosești
t.Setenvîntr-un test paralel: testul se oprește cu panică.
Comenzi înrudite
testing.T.Run: Rulează o funcție ca subtest, cu nume propriu; ideal pentru testele bazate pe un tabel de cazuri.testing.T.Cleanup: Înregistrează o funcție de curățenie care rulează după ce testul (și subtestele lui) s-au terminat.testing.T: Tipul primit de fiecare funcție de test; prin el raportezi erori, scrii mesaje și controlezi testul.