Tema
/
Struktūrinis programavimas GO
Pamoka 13 / 14 Testavimas (go test) ~45 min
📖 Teorija

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ą:

  1. 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.
  2. 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.