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