Ce face testing.T.Helper
Când muți verificări repetate într-o funcție proprie (de exemplu verificaPret(t, got, vrem)), mesajele de eroare arată implicit linia din acea funcție, aceeași pentru toate apelurile. Nu știi care apel a eșuat.
t.Helper(), apelat la începutul funcției ajutătoare, îi spune lui Go s-o sară când stabilește fișierul și linia mesajului. Eroarea va arăta linia din test de unde a fost apelată funcția.
Ce returnează
Nimic.
Exemple
Exemplul 1: Fără Helper: aceeași linie pentru toate erorile
// fișierul pret.go
package magazin
func PretFinal(net float64, cantitate int) float64 {
return net * float64(cantitate) * 1.19 // greșit: TVA este 21%
}
// fișierul pret_test.go
package magazin
import "testing"
func verificaPret(t *testing.T, got, vrem float64) {
if got != vrem {
t.Errorf("preț %.2f, aștept %.2f", got, vrem)
}
}
func TestPretFinal(t *testing.T) {
verificaPret(t, PretFinal(100, 1), 121)
verificaPret(t, PretFinal(10, 0), 0)
verificaPret(t, PretFinal(50, 2), 121)
}
Rezultatul în terminal (timpii diferă la fiecare rulare)
$ go test
--- FAIL: TestPretFinal (0.00s)
pret_test.go:7: preț 119.00, aștept 121.00
pret_test.go:7: preț 119.00, aștept 121.00
FAIL
exit status 1
FAIL magazin 0.319s
Exemplul 2: Cu Helper: linia din test
Singura diferență este t.Helper(). Acum mesajele arată liniile din TestPretFinal (13 și 15 în fișier) de unde au fost apelate verificările care au eșuat.
// fișierul pret_test.go
package magazin
import "testing"
func verificaPret(t *testing.T, got, vrem float64) {
t.Helper()
if got != vrem {
t.Errorf("preț %.2f, aștept %.2f", got, vrem)
}
}
func TestPretFinal(t *testing.T) {
verificaPret(t, PretFinal(100, 1), 121)
verificaPret(t, PretFinal(10, 0), 0)
verificaPret(t, PretFinal(50, 2), 121)
}
Rezultatul în terminal (timpii diferă la fiecare rulare)
$ go test
--- FAIL: TestPretFinal (0.00s)
pret_test.go:13: preț 119.00, aștept 121.00
pret_test.go:15: preț 119.00, aștept 121.00
FAIL
exit status 1
FAIL magazin 0.301s
Greșeli frecvente
- Apelezi
t.Helper()în funcția de test însăși. Nu are efect util; se pune în funcțiile ajutătoare.
Comenzi înrudite
testing.T.Error: Marchează testul ca eșuat și scrie un mesaj, dar lasă testul să continue (Errorf formatează ca Printf).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.