Bevezetés a tesztelés Go

tesztelés rendkívül fontos minden szoftver. Rendkívül fontos, hogy biztosítsuk a kód helyességét, és biztosítsuk, hogy az elvégzett változtatások ne okozzanak semmi mást a kódbázis különböző részein.

azáltal, hogy időt vesz igénybe a go programok megfelelő tesztelésére, megengedi magának, hogy gyorsabban fejlődjön, nagyobb bizalommal, hogy amit fejleszt, továbbra is működni fog, amikor kiadja a gyártásnak.

célok

a bemutató végére jól megértheti az alapvető funkciók és módszerek tesztelését a Go-ban a szabványos "testing" csomag használatával.

tapasztalatod lesz a táblázatvezérelt tesztek írásában, és azt is látni fogod, hogyan lehet több részletes kimenetet generálni a tesztekből a rendelkezésre álló különböző zászlók segítségével.

videó bemutató

ez a bemutató videó formátumban található, ha úgy tetszik:

Bevezetés

ebben az oktatóanyagban megvizsgáljuk, hogyan fejlesztheti és futtathatja a go kód tesztjeit a go test paranccsal.

Go tesztfájlok

ha látott már go projektet korábban, akkor észrevehette, hogy a legtöbb, ha nema projekten belüli összes fájl tartalmaz egy FILE_test.go megfelelőt az azonos könyvtárban.

ez nem baleset. Ezek azok a fájlok, amelyek tartalmazzák a projekt összes unit tesztjét, és tesztelik az összes kódot a társaikon belül.

Projektstruktúra példa
myproject/- calc.go- calc_test.go- main.go- main_test.go

egy egyszerű tesztfájl

Képzeld el, hogy volt egy nagyon egyszerű go programunk, amely egy fájlból állt, és calculate() funkciót mutatott be. Ez a calculate() függvény egyszerűen 1 számot vesz fel, és 2-t ad hozzá. Szép és egyszerű, hogy minket, és fut:

main.go

ha ezt szeretnénk tesztelni, létrehozhatunk egy main_test.go fájlt a samedirectory-ban, és megírhatjuk a következő tesztet:

main_test.menj
package mainimport ( "testing")func TestCalculate(t *testing.T) { if Calculate(2) != 4 { t.Error("Expected 2 + 2 to equal 4") }}

tesztjeink futtatása

most, hogy elkészítettük az első go tesztünket, itt az ideje futtatni ezt, és megnézni, hogy a kódunk úgy viselkedik-e, ahogy elvárjuk. A teszteket futással tudjuk végrehajtani:

$ go test

ennek valami hasonlót kell kiadnia a következőhöz:

$ go test
PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s

táblázat vezérelt tesztelés

most, hogy boldogok vagyunk, hogy egy számítás működik, meg kell nézni, hogy improveconfidence hozzáadásával néhány extra vizsgálati esetek a kódot. Ha azt akarjuk, hogy fokozatosan felépítsünk egy sor olyan tesztesetet, amelyeket Mindig tesztelünk, akkor array tesztet tudunk elvégezni:

itt deklarálunk egy struktúrát, amely mind a bemenetet, mind a várható értéket tartalmazza. Ezután ismételjük meg a tesztek listáját a for _, test := range tests hívással,és ellenőrizzük, hogy a függvényünk mindig a várt eredményeket adja vissza, függetlenül a bemenettől.

amikor most futtatjuk a tesztcsomagunkat, ugyanazt a kimenetet kell látnunk, mint korábban:

$ go teszt
PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s

részletes teszt kimenet

néha érdemes megnézni, hogy pontosan milyen tesztek futnak és mennyi ideig tartottak. Szerencsére ez akkor érhető el, ha a -v jelzőt használja a tesztek futtatásakor:

$ Go test-v

láthatja, hogy mind a normál teszt, mind a táblázat tesztje futott és telt el, és kevesebb, mint 0.00s végrehajtani.

a teszt lefedettségének ellenőrzése

a teszt lefedettsége olyan mutató, amelyet a vállalatok időnként visszaéltek. Ezek a vállalatok minden rendszerükön olyan célokat tűznek ki, mint “a kódbázisnak legalább 75% – ban teszteknek kell lennie”.

de az ilyen típusú célok rossz viselkedéshez vezethetnek, és a fejlesztőcsapatok “kijátszhatják”a rendszert annak érdekében, hogy megpróbálják elérni ezeket a célokat. Láttam, hogy egyes csapatokban az emberek napokat töltenek olyan egységtesztek írásával, amelyek tesztelik az alapvető gettereket és szettereket olyan nyelveken, mint a Java.

a tesztelés rendkívül fontos, de pragmatikusnak kell lennie abban, hogyan teszteli a rendszereit, hogy az Ön által írt tesztek a legnagyobb értéket nyújtsák Önnek.

a kódbázis nem fontos részeit lefedő tesztek írásával töltött napokat jobban el lehetett volna tölteni tesztesetek írásával a rendszereken belül elfoglalt kritikus üzleti logika körül, és biztosítva, hogy több edge eset legyen lefedve.

a-cover zászló használata

a fontos rész kihagyásával nézzük meg, hogyan ellenőrizheti a rendszer teszt lefedettségét a go test paranccsal:

ugyanabban a könyvtárban, mint a main.go és a main_test.go fájlok, futtassa a következőket:

$ go test-cover
PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.006s

látni fogja, hogy van 66.7% a teljes Go kód által lefedett testcases.

lefedettség megjelenítése

bár ez a 66.7% érték meg tudja mondani,hogy mennyi kódot teszteltünk, nem mutatja meg pontosan, hogy milyen kódútvonalakat teszteltünk vagy nem teszteltünk.

itt jönnek a go test és a go tool cover, hogy segítsenek nekünk megoldani ezt a különleges problémát.

használhatjuk a go test eszközt egy coverprofile létrehozására, amelyet ezután HTML megjelenítéssé alakíthatunk a go tool cover paranccsal:

$ go test-coverprofile=lefedettség.out
PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.008s

akkor majd fog ez generált coverage.out fájlt, és használja generatea HTML oldal, amely megmutatja, hogy pontosan milyen sorokat lefedett, mint így:

$ go tool cover -html=coverage.out

ez megnyit egy oldalt a választott böngészőben, amely egy kicsit így fog kinézni:

mint látható, a legtöbb kódot a mi Calculate funkció tesztelése andfeatures Green lefedettség. Míg a print utasítás a main functionis Red mivel ez nem terjedt ki a vizsgálatok.

következtetés

remélhetőleg hasznosnak találta ezt az oktatóanyagot! Ha további segítségre van szüksége, akkor kérjük, bátran ossza meg velem az alábbi megjegyzések részben.