Kodėl testai: go test ir pirmasis testas
Kaskart pakeitęs programą tikrindavai ją taip pat: paleidi, įvedi šį tą, perskaitai išvestį, nusprendi, ar atrodo teisingai. Tai veikia — kol programa turi dešimt funkcijų ir po kiekvieno pakeitimo tektų iš naujo pertikrinti visas. Netikrinsi. Tad klaidos tyliai grįžta.
Testas — tai kodas, kuris automatiškai tikrina kitą kodą. Parašai kartą; go test paleidžia jį per sekundės dalį, kiek nori kartų.
Go turi testavimą įtaisytą viduje — jokios bibliotekos diegti nereikia. Du susitarimai atlieka visą darbą:
- Testo kodas gyvena faile, kurio vardas baigiasi
_test.go(pvz.,text_test.go). Go laiko jį atokiau nuo įprasto build'o; jis kompiliuojamas tik paleidus testus. - Testas — tai funkcija, pavadinta
TestSomething, priimanti vieną argumentąt *testing.T.
Štai pilnas pirmasis testas. Tarkim, tavo programa turi tokią funkciją:
func double(n int) int {
return n * 2
}
Jos testas:
package main
import "testing"
func TestDouble(t *testing.T) {
got := double(5)
want := 10
if got != want {
t.Errorf("double(5) = %d, want %d", got, want)
}
}
Skaityk paprastai: iškviesk funkciją, palygink got (ką gavai) su want (ko norėjai), o jei skiriasi — kviesk t.Errorf pranešti. t.Errorf nestabdo programos — jis užfiksuoja nesėkmę ir leidžia testui bėgti toliau.
Paleisk iš savo projekto aplanko:
go test
Jei viskas sutampa, gauni tylų ir malonų:
ok yourapp 0.2s
Tas ok reiškia, kad visi testai praėjo. Nori matyti kiekvieną pavadinimu? Pridėk -v (verbose):
go test -v
got/want — visas stilius. Pastebėk, kad klaidos žinutė sako tiksliai, kas nutiko ir ko buvo tikimasi: double(5) = 11, want 10. Kai testas kris po kelių mėnesių, ta viena eilutė pasakys, kas sugedo, net neatvertus kodo. Visada formuluok nesėkmes taip.
Toliau: šablonas, leidžiantis vienu testu patikrinti daug atvejų — ir nukreipsim jį tiesiai į klaidą, kurią jau sutikai.