Treci la conținutul principal

Reguli mici, diferență mare

Testele bune respectă câteva obiceiuri:

1. Nume clare — TestGreetEmptyName spune ce s-a stricat fără să deschizi fișierul.
2. Un singur comportament per test — testele mici arată direct spre problemă.
3. Tabele pentru multe cazuri — o singură buclă în loc de teste copiate.
4. Mesaje cu got și want — o eșuare trebuie să se explice singură.
5. t.Error ca să vezi tot, t.Fatal când nu are rost să continui.
6. Rulează testele des — după fiecare modificare mică, nu o singură dată la final.
7. Testele stau lângă cod — același folder, sufixul _test.go.


Mesaje de eșuare care ajută

Un test care eșuează este citit într-un moment de confuzie — mesajul trebuie să poarte toată povestea: ce apel, ce a venit înapoi, ce se aștepta.

Convenția Go este Func(input) = got; want want. Cu %q șirurile sunt puse între ghilimele, așa că spațiile sau semnele de punctuație lipsă se văd imediat.

Un mesaj cu toată povestea

Greet întoarce salutul greșit. Mesajul de eșuare arată apelul, valoarea got și valoarea want — eroarea (cuvânt greșit, virgulă și semn de exclamare lipsă) se vede doar din ieșire, fără să deschizi codul.

Prompt
Scrie un fișier de test Go în care o funcție Greet întoarce salutul greșit („Bună Ana” în loc de „Salut, Ana!”) și testul raportează eșuarea în convenția Go: apelul, valoarea got și valoarea want, folosind %q pentru ca șirurile să fie puse între ghilimele. Arată ieșirea go test -v a rulării care eșuează.
Ieșire: program Go și rezultatul capturat

Un singur comportament per test

Un test care verifică cinci lucruri are cinci motive să eșueze — iar numele lui poate descrie doar unul dintre ele. Împărțirea pe comportamente păstrează fiecare test mic și numele lui onest.

Aici salutul normal și varianta de rezervă pentru numele gol sunt două comportamente, așa că primesc două teste. Când unul eșuează, numele lui îți spune deja ce comportament s-a stricat.

Două comportamente, două teste

TestGreetName verifică cazul normal, TestGreetEmpty varianta de rezervă. Ieșirea detaliată le listează separat — o eșuare ar arăta exact spre un singur comportament.

Prompt
Scrie un fișier de test Go cu o funcție Greet care salută pe nume și folosește „Salut, străine!” ca variantă de rezervă pentru un nume gol. Scrie două teste separate și focalizate, câte unul pentru fiecare comportament, cu nume care spun ce verifică. Arată ieșirea go test -v a rulării care trece, cu ambele teste listate.
Ieșire: program Go și rezultatul capturat

Cât este testat: acoperirea

go test -cover măsoară ce parte din codul tău execută efectiv testele, ca procent din instrucțiuni.

Numărul este o busolă, nu un scop: o valoare mică arată căi netestate — aici testul parcurge doar ramura mild, așa că ramurile freezing și hot nu sunt verificate niciodată. O acoperire de 100% nu dovedește că acel cod este corect, dar liniile neacoperite sunt sigur neverificate.

Măsoară acoperirea

Describe are trei ramuri, testul parcurge una. Numărul acoperirii o dezvăluie — adăugarea de teste pentru ramura de frig și cea de căldură l-ar face să crească.

Prompt
Scrie un fișier de test Go cu o funcție Describe care întoarce freezing, mild sau hot în funcție de o temperatură și un singur test care verifică doar ramura mild. Arată ieșirea go test -cover cu procentul de acoperire.
Ieșire: program Go și rezultatul capturat
Measure the coverage