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— pavadinktext.goirgo testtestų nematys; pavadinktexttest.goir Go bandys jį įtraukti į programą. (2)import "testing"privalo būti, o kiekvienas testas priimat *testing.T. Jeigo testsako „undefined: charCount", tavo testų failas kitame aplanke ar pakete nei funkcija — laikyk juos kartupackage main.