Ce face testing.T.Error
t.Error scrie valorile ca fmt.Println, iar t.Errorf le formatează ca fmt.Printf. Ambele marchează testul ca eșuat (FAIL) și scriu mesajul cu fișierul și linia, dar testul continuă. Așa afli dintr-o singură rulare toate verificările care au eșuat.
Sunt echivalente cu t.Log/t.Logf urmat de t.Fail(). Când o eroare face restul testului inutil (sau periculos, de exemplu o valoare nil), folosește t.Fatal.
Parametri
| Parametru | Descriere |
|---|---|
args |
Valorile mesajului. |
format |
La Errorf: șablonul mesajului. |
Ce returnează
Nimic.
Exemple
Exemplul 1: Toate verificările eșuate, într-o singură rulare
Funcția are două greșeli: nu elimină spațiile din nume și scrie orașul cu majuscule. Testul raportează ambele.
// fișierul client.go
package magazin
import "strings"
type Client struct {
Nume, Email, Oras string
}
// ParseazaClient citește un rând de forma "nume;email;oraș".
func ParseazaClient(rand string) Client {
c := strings.Split(rand, ";")
return Client{Nume: c[0], Email: strings.TrimSpace(c[1]), Oras: strings.ToUpper(c[2])}
}
// fișierul client_test.go
package magazin
import "testing"
func TestParseazaClient(t *testing.T) {
c := ParseazaClient(" Ana Popescu;ana@exemplu.ro;Iași")
if c.Nume != "Ana Popescu" {
t.Errorf("Nume = %q, aștept %q", c.Nume, "Ana Popescu")
}
if c.Email != "ana@exemplu.ro" {
t.Errorf("Email = %q, aștept %q", c.Email, "ana@exemplu.ro")
}
if c.Oras != "Iași" {
t.Error("Oras greșit:", c.Oras)
}
}
Rezultatul în terminal (timpii diferă la fiecare rulare)
$ go test
--- FAIL: TestParseazaClient (0.00s)
client_test.go:8: Nume = " Ana Popescu", aștept "Ana Popescu"
client_test.go:14: Oras greșit: IAȘI
FAIL
exit status 1
FAIL magazin 0.300s
Exemplul 2: Verificarea unei erori așteptate
// fișierul stoc.go
package magazin
import (
"errors"
"fmt"
)
var ErrStocInsuficient = errors.New("stoc insuficient")
func Scoate(stoc map[string]int, produs string, n int) error {
if stoc[produs] < n {
return fmt.Errorf("%s: %w", produs, ErrStocInsuficient)
}
stoc[produs] -= n
return nil
}
// fișierul stoc_test.go
package magazin
import (
"errors"
"testing"
)
func TestScoate(t *testing.T) {
stoc := map[string]int{"cafea": 3}
if err := Scoate(stoc, "cafea", 2); err != nil {
t.Errorf("Scoate 2 din 3: eroare neașteptată: %v", err)
}
err := Scoate(stoc, "cafea", 5)
if !errors.Is(err, ErrStocInsuficient) {
t.Errorf("Scoate 5 din 1: eroare %v, aștept ErrStocInsuficient", err)
}
if stoc["cafea"] != 1 {
t.Error("stoc final", stoc["cafea"], "aștept 1")
}
}
Rezultatul în terminal (timpii diferă la fiecare rulare)
$ go test -v
=== RUN TestScoate
--- PASS: TestScoate (0.00s)
PASS
ok magazin 0.313s
Greșeli frecvente
- Folosești
t.Errorși apoi continui să folosești o valoare care poate finil. Testul se oprește cu panică; foloseștet.Fatalîn acest caz. - Scrii mesaje vagi (
t.Error("greșit")). Include intrarea, ce ai primit și ce aștepți.
Comenzi înrudite
testing.T.Fatal: Marchează testul ca eșuat, scrie mesajul și oprește imediat testul curent; celelalte teste continuă.testing.T: Tipul primit de fiecare funcție de test; prin el raportezi erori, scrii mesaje și controlezi testul.testing.T.Helper: Marchează o funcție ca ajutătoare, ca erorile raportate din ea să arate linia din test care a apelat-o.testing.T.Run: Rulează o funcție ca subtest, cu nume propriu; ideal pentru testele bazate pe un tabel de cazuri.