Tanuld meg, hogyan teszteld a Go-feladataidat az Exercism-ön
Az exercism projektkönyvtáradban lévő Go-feladatokat úgy futtathatod, hogy átlépsz a feladat könyvtárába, és lefuttatod a go test parancsot.
cd exercism/project/directory/go/leap
go test
A go test futtatása mellett néhány feladatot érdemes az adatverseny-detektor kapcsolójával futtatni, hogy ellenőrizd, a megoldásod nem vezet-e be adatverseny-hibákat.
A megfelelő feladatokban emlékeztetőt találsz arra, hogy a teszteket az adatverseny-detektor -race kapcsolójával futtasd.
Futtasd a go test -race parancsot, hogy ellenőrizd az adatversenyt.
Például:
cd exercism/project/directory/go/bank-account
go test -race
A legtöbb feladat tartalmaz benchmarkokat, amelyekkel meghatározhatod, hogy a megoldásod változtatásai hogyan hatnak a teljesítményére.
Egy feladat benchmarkjainak futtatásához használd a go test -v --bench . --benchmem parancsot a feladat könyvtárában.
Vegyük ezt a kimenetet.
BenchmarkReverse-16 403594 2537 ns/op 176 B/op 34 allocs/op
Ez azt jelenti, hogy a megbízható időméréshez a benchmarknak 403594 iterációra volt szüksége. Az átlagos sebesség 2537 ns volt ciklusonként. Műveletenként 34 memóriafoglalás történt, átlagosan 176 bájt.
A példatesztek néhány feladatban használatosak, és a szokásos feladattesztekkel együtt futnak. Ezek a példák a feladat API-jának dokumentálására és ellenőrzésére szolgálnak, és hasznosak lehetnek annak meghatározásában, hogy mi a feladat elvárt API-ja.
A beküldés előtt futtasd a go fmt parancsot a kódodon.
Az egyes feladatok README.md fájlja egy általános leírást ad, de a Go-tesztprogram nagyon konkrét lesz.
Nyisd meg a tesztprogramot, és vess rá egy gyors pillantást. Ha csalásnak tűnik, akkor is tedd meg.
Keress hasznos megjegyzéseket, tesztadatokat, és egyszerűen a tesztfüggvények nevét.
Próbáld meg lefuttatni a go test parancsot, mielőtt bármit is írtál volna, és nézd meg, hogy a hibaüzenetek segítenek-e eldönteni, hol kezdd.
Az első célod, hogy valami leforduljon, még akkor is, ha megbukik a teszteken.
Ehhez „stubold” a függvényeket.
Ez azt jelenti, hogy hagyd üresen a törzset, kivéve azt, amit vissza kell adnia.
Írj return 0-t vagy return ""-t, vagy bármit, csak hogy leforduljon.
Néha ahhoz, hogy kitaláld a függvényszignatúrákat, vissza kell térned a tesztprogramhoz, és részletesebben el kell olvasnod.
Amint kitaláltad az összes szükséges függvényszignatúrát, a tesztprogram panaszkodni fog, hogy a 0 rossz válasz.
Most kezdd el kitölteni a függvénytesteket.
A tesztek gyakran az első hibánál leállnak.
Javítsd ki azt, és ismételd, amíg nem lesz több hiba.
A go test hasznos opciókkal rendelkezik.
A go test -v részletesebb kimenetet ad. A go test -run <regexp> csak azokat a teszteket futtatja, amelyeknek a neve illeszkedik a <regexp> mintára.
A pánikok rengeteg kimenetet eredményeznek. Elsőre ijesztőnek tűnhet, de légy bátor. A pánikkimenet legtetején keresd a pániküzenetet. Ez általában megadja a probléma általános leírását. Ezután olvasd végig a többit, keresve a kódodra való első hivatkozást. Ez gyakran pontosan a problémára mutat rá.
A konkurens programok hibáinak megtalálásához próbáld ki a go test -race parancsot.
Mondjuk ki még egyszer: futtasd a go fmt parancsot.
A Golint tájékoztathat a kódod olyan stílusproblémáiról, amelyeket a go fmt nem fog el.
Megnézheted a go vet parancsot is, amely a kódod lehetséges problémáira figyelmeztet.
Olvasd el és fogadd meg a kódáttekintések gyakori észrevételeit.
Ha egy feladat konkurenciát is magában foglal, próbáld ki a go test -race parancsot akkor is, ha átmegy a tesztjein.
Tartsd szem előtt az olvashatóságot akkor is, ha a benchmark teljesítményére optimalizálsz.
Néha az optimalizálás segíthet tömör és olvasható megoldásokat felfedezni, de megvan a kísértés, hogy a teljesítmény hajszolása közben feladd az olvashatóságot.
Néhány feladatnak vannak bónusztesztjei, amelyek nem futnak le csupán a go test paranccsal.
Ha a rendes feladat mellett a bónuszfeladatot is megoldod, be kell írnod a go test -tags bonus parancsot, vagy valamilyen hasonló parancsot, amit a tesztprogram dokumentációja megad.