Tesztelés a Go-kurzuson

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

Tesztek adatverseny-detektorral

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

Benchmarkok futtatása

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.

Tesztelhető példák

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.

Go fmt

A beküldés előtt futtasd a go fmt parancsot a kódodon.

Tippek és tanácsok

A feladat megírása

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.

Javítás

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.

A kódod rendbetétele

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.

Bónusztesztek

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.