Johdatus testaukseen Go
testaus on valtavan tärkeää kaikissa ohjelmistoissa. On erittäin tärkeää varmistaa koodisi oikeellisuus ja varmistaa, että tekemäsi muutokset eivät pääty rikkomaan mitään muuta koodisi eri osissa.
kun käytät aikaa go-ohjelmiesi asianmukaiseen testaamiseen, annat itsesi kehittyä nopeammin ja luotat siihen, että se, mitä kehität, toimii edelleen, kun vapautat sen tuotantoon.
tavoitteet
tämän opetusohjelman loppuun mennessä sinulla on hyvä käsitys Go: n perustoimintojen ja-menetelmien testaamisesta standardia "testing"
käyttäen.
sinulla on kokemusta taulukkopohjaisten testien kirjoittamisesta, ja voit myös nähdä, miten voit tuottaa testeistäsi enemmän monisanaista tulosta eri lippujen avulla.
opetusvideo
tämä opetusvideo löytyy halutessasi videomuodossa:
Johdanto
tässä opetusohjelmassa tarkastelemme, miten voit kehittää ja suorittaa testejä go-koodillesi komennolla go test
.
Go-Testitiedostot
jos olet nähnyt go-projekteja aiemmin, olet saattanut huomata, että useimmissa, ellei kaikissa projektin tiedostoissa, on FILE_test.go
vastine samassa hakemistossa.
kyseessä ei ole onnettomuus. Nämä tiedostot sisältävät kaikki projektiin liittyvät yksikkötestit, ja ne testaavat kaikkia koodeja vastapuoliensa sisällä.
myproject/- calc.go- calc_test.go- main.go- main_test.go
yksinkertainen testitiedosto
Kuvittele, että meillä oli hyvin yksinkertainen go-ohjelma, joka koostui yhdestä tiedostosta ja jossa oli calculate()
funktio. Tämä calculate()
funktio yksinkertaisesti ottaa 1numeron ja lisää siihen 2. Nice and simple to get us up and running:
jos haluaisimme testata tätä, voisimme luoda main_test.go
– tiedoston samaan hakemistoon ja kirjoittaa seuraavan testin:
package mainimport ( "testing")func TestCalculate(t *testing.T) { if Calculate(2) != 4 { t.Error("Expected 2 + 2 to equal 4") }}
testimme
nyt kun olemme luoneet ensimmäisen go-testimme, on aika ajaa tämä ja katsoa, käyttäytyykö koodimme odotetulla tavalla. Voimme suorittaa testimme juoksemalla:
$ go test
tämän pitäisi sitten tuottaa jotain vastaavaa:
PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s
Taulukkovetoinen testaus
nyt kun olemme tyytyväisiä, että yksi laskutoimitus toimii, meidän pitäisi pyrkiä parantamaan luottamusta lisäämällä muutama ylimääräinen testitapaus koodiimme. Jos haluamme rakentaa jatkuvasti testattavien testitapausten sarjan, voimme tehdä array
tällaisia testejä:
tässä julistamme rakenteen, joka sisältää sekä syötteen että odotusarvon. Käymme läpi testiluettelon soittamalla for _, test := range tests
ja tarkistamalla, että funktiomme palauttaa aina odotetut tulokset syötteestä riippumatta.
kun nyt ajetaan testisarjaa, pitäisi nähdä sama ulostulo kuin ennenkin:
PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s
monisanainen testitulos
joskus saatat haluta nähdä tarkasti, mitä testejä on käynnissä ja kuinka kauan ne kestävät. Onneksi tämä on käytettävissä, jos käytät -v
lippua ajaessasi testejäsi näin:
voit nähdä, että sekä normaali testimme että pöytätestimme ajoivat ja läpäisivät ja sujuivat kuin 0.00s
suorittaa.
Testikattavuuden tarkistaminen
Testikattavuus on mittari, jota olen joskus nähnyt yritysten käyttävän väärin. Nämä yritykset asettavat kaikille järjestelmilleen tavoitteita, kuten ”testitulosten on katettava vähintään 75 prosenttia koodikannasta”.
mutta tällaiset kohteet voivat johtaa huonoon käytökseen ja kehitystiimit ”pelaavat”systeemiä yrittäen osua näihin kohteisiin. Olen nähnyt ihmisiä joissakin tiimeissäspend days kirjallisesti yksikkö testejä, jotka testaavat perus getters ja setters kielellä kuten Java.
testaus on erittäin tärkeää, mutta sinun on oltava pragmaattinen sen suhteen, miten testaat järjestelmiäsi, jotta kirjoittamasi testit antavat sinulle eniten arvoa.
ne päivät, jotka kuluivat kirjoittaessa testejä, joilla katettiin codebasen merkityksettömiä osia, olisi voitu käyttää paremmin testitapausten kirjoittamiseen kriittisen liiketoiminnan logiccaportoidun järjestelmän ympärille ja varmistaen, että edge-tapaukset katetaan.
käyttämällä-cover-lippua
ja tärkeää osaa pois tieltä, katsotaan, miten voit tarkistaa järjestelmäsi kattavuuden käyttämällä go test
– komentoa:
samassa hakemistossa kuin main.go
ja main_test.go
– tiedostosi, suorita seuraava:
PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.006s
näet, että sinulla on 66.7%
koko Go-koodistasi koelaatikot.
visualisoidaan kattavuus
vaikka tämä 66.7%
arvo voi kertoa,kuinka paljon koodiamme olemme testanneet, se ei näytä meille tarkalleen, mitä koodipolkuja olemme testanneet tai emme ole testanneet.
tässä kohtaa go test
ja go tool cover
tulevat auttamaan meitä ratkaisemaan tämän erityisen ongelman.
voimme luoda go test
– työkalun avulla coverprofile
, joka voidaan muuntaa HTML-visualisoinniksi go tool cover
komennolla:
PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.008s
voit sitten ottaa tämän generoidun coverage.out
tiedoston ja käyttää sitä generatea HTML-sivun, joka näyttää tarkalleen, mitä rivejä on peitetty näin:
$ go tool cover -html=coverage.out
tämä avaa sivun selaimessasi valinta, joka näyttää hieman jotain tällaista:
kuten näette, suurin osa koodista meidän Calculate
funktio on testaus andfeatures Green
kattavuus. Vaikka main
funktion tulostuslause on Red
, koska tätä ei ole käsitelty testeissä.
johtopäätös
Toivottavasti tämä opetusohjelma on hyödyllinen! Jos tarvitset lisäapua, ota rohkeasti yhteyttä minuun alla olevassa kommenttiosiossa.