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ä.

projektirakenne esimerkki
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:

main.mene

jos haluaisimme testata tätä, voisimme luoda main_test.go – tiedoston samaan hakemistoon ja kirjoittaa seuraavan testin:

main_test.mene
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:

$ go test
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 testsja tarkistamalla, että funktiomme palauttaa aina odotetut tulokset syötteestä riippumatta.

kun nyt ajetaan testisarjaa, pitäisi nähdä sama ulostulo kuin ennenkin:

$ go test
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:

$ go test-v

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:

$ go test-cover
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:

$ go test-coverprofile=coverage.out
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.