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

Sukurk text_test.go — tavo apsaugos tinklas

Dabar surink tikrą dalyką: vieną testų failą tavo programos teksto pagalbininkams. Sukurk failą text_test.go šalia main.go (tas pats aplankas, tas pats package main). Jis testuoja tris funkcijas, kurias jau parašei 7 pamokoje — charCount, truncateRunes ir validateTitle — visiškai jų nekeičiant.

Trys lentelės testai, po vieną funkcijai. Kiekvienas išvardija kelis atvejus, tada cikle praneša neatitikimus su got/want žinute:

  • TestCharCount — turi {"ąžuolas", 7}, atvejį, kuris krenta vos kam nors grįžus prie baitų skaičiavimo.
  • TestTruncateRunes — vienas trumpas įėjimas (nepakitęs) ir vienas ilgas lietuviškas (nukirptas švariai ties simboliu, ne per pusę baito).
  • TestValidateTitle — teisingas pavadinimas (tuščia klaida), vien iš tarpų (atmestas) ir lietuviškas pavadinimas, kuris tinka pagal simbolių skaičių.

Paleisk visą failą:

go test -v
=== RUN   TestCharCount
--- PASS: TestCharCount (0.00s)
=== RUN   TestTruncateRunes
--- PASS: TestTruncateRunes (0.00s)
=== RUN   TestValidateTitle
--- PASS: TestValidateTitle (0.00s)
PASS
ok      yourapp   0.5s

Trys funkcijos, devyni atvejai, patikrinti per pusę sekundės — ir gali paleisti iš naujo po kiekvieno būsimo pakeitimo, neįvedęs nė vienos eilutės.

Pastaba — testų failas nepaleidžia tavo main. go test sukompiliuoja paketą, paleidžia Test… funkcijas ir ignoruoja main. Tad tavo meniu ciklas ir jo readLine netrukdo: testai tiesiogiai išbando grynąsias funkcijas. Būtent todėl 7 ir 9 pamokose logiką laikėme mažose funkcijose, kurios priima įėjimą ir grąžina rezultatą — jos ir yra vertos testuoti.

Spąstai (testų failas nesikompiliuoja). Dvi klasikinės klaidos: (1) failas turi baigtis _test.go — pavadink text.go ir go test testų nematys; pavadink texttest.go ir Go bandys jį įtraukti į programą. (2) import "testing" privalo būti, o kiekvienas testas priima t *testing.T. Jei go test sako „undefined: charCount", tavo testų failas kitame aplanke ar pakete nei funkcija — laikyk juos kartu package main.