Testiranje programske opreme je postopek, ki ocenjuje meritve programov z orodji, skripti ali ročno.

Testiranje je sestavni del cikla razvoja programske opreme. Obsežno testiranje zagotavlja poglobljene informacije o integriteti vaše aplikacije.

Napake lahko preprečite in popravite s pisanjem testov, ocenjevanjem delovanja programa in avtomatizacijo delovnih tokov.

Začetek testiranja v Go

Standardna knjižnica Go zagotavlja razvijajočo se testiranje paket. The testiranje paket ima primerjalno analizo, fuzzing, preskok, podtestiranje, podprimerjalno analizo in druge funkcije.

Testiranje s tem paketom je enostavno. Tukaj je preprosta testna struktura, ki bo služila kot model za test:

vrsta Primeri struct {
// pričakovan rezultat testa
pričakovano int

// izhod funkcije
dejansko int

// vrednost, ki jo posredujete funkciji
prepir vrvica
}

Tukaj je preprosta funkcija, ki pretvori nize v cela števila. Vaš test bo preizkusil to funkcijo.

uvoz (
"strconv"
)

funkStringToInteger(str vrvica)int {
celo število, napaka := strconv. Atoi (str)

če napaka!= nič {
vrnitev0
}

vrnitev celo število
}

instagram viewer

The StringToInteger funkcija vrne 0 če je napaka pri pretvorbi in celo število, če napak ni.

Tukaj je testna funkcija za StringToInteger:

funkTestStringToInteger(test *testiranje. T) {
pričakovanInt := StringToInteger("3")

caseInstance := Primeri {
pričakovano: pričakovanoInt,
dejansko: 3,
}

če caseInstance.expected == caseInstance.actual {
// nekaj kode tukaj
} drugače {
test. neuspeh()
}
}

The TestStringToInteger testna funkcija sprejme a testiranje. T objekt kot svoj argument. The pričakovan Int spremenljivka vsebuje rezultat pretvorbe niza. The caseInstance spremenljivka je instancirana struktura Cases za test. The če izjava primerja pričakovane in dejanske vrednosti.

The neuspeh metoda vrne neuspešen test v stavku else, če vrednosti niso enake.

Go ponuja a test ukaz za avtomatizacijo in pridobivanje vpogledov v vaše teste in programe.

pojdi test
pojdi test pomoči

Stran s pomočjo vsebuje podrobne informacije o tem, kako pojdi testirat dela:

Ekosistem Go je dom številnih knjižnic, ki naredijo testiranje bolj dostopno in prilagodljivo. Poleg tega obstaja veliko funkcij testiranje paket, vključno z regresija in enotno testiranje.

Paket Testify

Paket Testify je eno najbolj priljubljenih ogrodij Go za testiranje paketov. Zagotavlja orodja, ki jih boste potrebovali za pisanje učinkovitih testov, z enostavnimi funkcijami za trditve, norčevanje in zbirko testov.

Testify je primeren za testno usmerjen razvoj, saj paket zagotavlja a posmehovati se paket. To zagotavlja mehanizem za pisanje lažnih objektov, ki jih lahko uporabite namesto resničnih objektov pri testiranju.

Paket vsebuje tudi:

  • An trditi paket, ki ponuja uporabne metode za pisanje prijaznih, berljivih testov.
  • A zahtevati paket podoben trditi paket za vračanje logičnih rezultatov.
  • A apartma paket za testne zbirke s strukturami.

Priča se razteza na testiranje paket in lahko uporabite pojdi testirat ukaz za izvajanje testov, napisanih s paketom Testify.

Testify podpira različice Go od 1.13. Paket lahko dodate kot odvisnost projekta s tem ukazom:

pojdi dobite github.com/stretchr/testify

Tukaj je preprost preizkus trditve s paketom Testify trditi paket:

paket glavni

uvoz (
"testiranje"
"github.com/stretchr/testify/assert" // potrdi samo paket
)

// ime funkcije mora biti po dogovoru "Nekaj".
funkTestSomething(t *testiranje. T) {
// uveljavljanje enakosti
trditi. Enako (t, 123, 123, "morale bi biti enake")

// uveljavljanje neenakosti
trditi. NiEnako (t, 123, 456, "ne smejo biti enaki")
}

The TestSomething testna funkcija prevzame strukturo vrste testiranja testiranje paket kot argument. The Enakopravni in NotEqual metode so za trditve na podlagi enakosti in neenakosti podjetja Testify trditi paket.

Paket GoConvey

GoConvey je orodje za testiranje Go, pripravljeno za izraznost nad testiranje paket. Vključuje terminal (CLI) in brskalnik (GUI) testiranje funkcionalnosti.

Paket GoConvey se integrira z testiranje paket, ki zagotavlja spletni uporabniški vmesnik za delo z domačimi testi Go. Vključuje tudi funkcionalnost za regresijske teste, prilagodljive izhode in generiranje testne kode. Preizkuse lahko izvajate samodejno, dostopate do formatov pokritosti v HTML in prilagodite GUI.

Zaženite ta ukaz v terminalu vašega delovnega prostora Go, da namestite paket Go Convey.

pojdi dobite github.com/smartystreets/goconvey

Tukaj je preprost primer pisanja testov s paketom GoConvey.

paket glavni

uvoz (
. "github.com/smartystreets/goconvey/convey"
"testiranje"
)

funkTestSomething(t *testiranje. T) {
// Prenesite samo t v klice Convey na najvišji ravni
Convey("Deklariraj spremenljivko", t, funk() {
x := 1

Convey("povečanje spremenljivke", funk() {
x++

Convey("uveljavi enakost", funk() {
Torej (x, ShouldEqual, 2)
})
})
})
}

Uvoziti boste morali posredovati paket z zapisom s pikami za test.

Funkcija Prenesi iz Prenesi paket pomaga pri določanju obsega testa. Zadnji Prenesi klic funkcije v primeru kode uveljavlja enakost med x spremenljivka in 2, uporabljati ShouldEqual funkcijo.

Paket HTTP Expect

The HTTP Expect paket je enostaven za uporabo, jedrnat, deklarativen paket za preizkušanje HTTP in REST API Go's end-to-end. Uporabite ga lahko za postopno ustvarjanje zahtev HTTP in rekurzivno pregledovanje odgovorov in njihove koristne obremenitve.

The httpexpect paket je nabor verižnih graditeljev za zahteve HTTP in trditve o odzivih HTTP in uporabnih obremenitvah. Zgrajena je na http, testiranje, in drugi paketi. Paket dobro deluje tudi z vgrajenim httptest paket.

httpexpect zagotavlja funkcionalnost za gradnjo zahtev s konstrukcijo URL-jev, glavami, piškotki in uporabnimi obremenitvami. Obravnava trditve odziva, trditve koristne obremenitve, lepo tiskanje in WebSockets.

Zaženite ta ukaz v terminalu vašega delovnega imenika, da namestite httpexpect paket.

pojdi dobite github.com/gavv/httpexpect

Tukaj je preprost primer testiranja funkcije upravljalnika z httpexpect paket.

paket glavni

uvoz (
"fmt"
"github.com/gavv/httpexpect/v2"
"net/http"
"net/http/httptest"
"testiranje"
)

funkexampleHandler()http.Voditelj {
vrnitev http. HandlerFunc(funk(pisatelj http. ResponseWriter, zahtevajte *http. Prošnja) {
fmt. Fprintln (pisatelj, "Hello World")
})
}

funkTestexampleHandler(t *testiranje. T) {
// ustvari http. Voditelj
handler := exampleHandler()

// zagon strežnika z uporabo httptest
strežnik := httptest. NewServer (obravnavalnik)
odložiti strežnik. Zapri()

// ustvari primerek http pričakovanja
pričakuj := httppričakuj. Novo (t, strežnik. URL)

// ali deluje?
pričakovati. GET("/").
Pričakovati().
Stanje (http. StatusOK).JSON().Array().Empty()
}

The exampleHandler funkcija handler vrne HTTP handler za httpexpect paket. The TestexampleHandler funkcija deklarira primerek funkcije za obravnavo. Nato ustvari nov strežnik za testiranje končne točke z httptest paket.

The pričakovati spremenljivka je tvoja httpexpect primerek, ki zadene DOBITI zahtevajte korensko pot končne točke na strežniku. The Stanje funkcija vrne statusno kodo (v tem primeru, 200), če je test uspešen.

Napišite obsežne in intuitivne teste

Preizkusi veliko prispevajo k ocenjevanju celovitosti vaše aplikacije in obstaja veliko vzorcev in metod testiranja, ki jih lahko uporabite za svoje programe. V središču vašega poteka testiranja bi morali napisati intuitivne teste, ki jih lahko izboljšate, ko se vaši programi sčasoma spreminjajo.