Testiranje softvera je proces koji procjenjuje metriku programa pomoću alata, skripti ili ručno.

Testiranje je sastavni dio ciklusa razvoja softvera. Sveobuhvatno testiranje pruža detaljne informacije o integritetu vaše aplikacije.

Možete spriječiti i ispraviti pogreške pisanjem testova, procjenom izvedbe programa i automatiziranjem radnih procesa.

Početak testiranja u Gou

Go standardna biblioteka pruža razvijajući se testiranje paket. The testiranje paket ima benchmarking, fuzzing, preskakanje, sub-testiranje, sub-benchmarking i druge funkcije.

Testiranje s ovim paketom je jednostavno. Evo jednostavne strukture testa koja će poslužiti kao model za test:

tip Slučajevi strukturirati {
// očekivani rezultat testa
očekivano int

// izlaz funkcije
stvarni int

// vrijednost koju prosljeđujete funkciji
argument niz
}

Evo jednostavne funkcije koja pretvara nizove u cijele brojeve. Vaš će test testirati ovu funkciju.

uvoz (
"strconv"
)

funkStringToInteger(str niz)int {
cijeli broj, pogreška := strconv. Atoi (str)

ako pogriješiti != nula {
povratak0
}

povratak cijeli broj
}

instagram viewer

The StringToInteger funkcija se vraća 0 ako postoji greška pri pretvorbi i cijeli broj ako nema grešaka.

Evo testne funkcije za StringToInteger:

funkTestStringToInteger(test *testiranje. T) {
očekivaniInt := StringToInteger("3")

caseInstance := Slučajevi {
očekivano: očekivaniInt,
stvarno: 3,
}

ako caseInstance.expected == caseInstance.actual {
// neki kod ovdje
} drugo {
test. Iznevjeriti()
}
}

The TestStringToInteger test funkcija prihvaća a testiranje. T objekt kao svoj argument. The očekivano Int varijabla sadrži rezultat pretvorbe niza. The caseInstance varijabla je instancirana Cases struktura za test. The ako izjava uspoređuje očekivane i stvarne vrijednosti.

The Iznevjeriti metoda vraća neuspjeli test u else naredbi ako vrijednosti nisu jednake.

Go pruža a test naredba za automatizaciju i dohvaćanje uvida u vaše testove i programe.

ići test
ići pomoć test

Stranica za pomoć pruža detaljne informacije o tome kako idi testirati djela:

Ekosustav Go dom je mnogih knjižnica koje testiranje čine dostupnijim i fleksibilnijim. Postoji mnogo funkcionalnosti izvan testiranje paket, uključujući regresija i jedinično testiranje.

Paket Svjedoči

Paket Testify je jedan od najpopularnijih Go okvira za testiranje paketa. Pruža alate koji će vam trebati za pisanje učinkovitih testova, s jednostavnim funkcijama tvrdnji, ismijavanja i paketa za testiranje.

Testify je prikladan za razvoj vođen testiranjem jer paket pruža a oponašanje paket. Ovo pruža mehanizam za pisanje lažnih objekata koje možete koristiti umjesto stvarnih objekata u testiranju.

Paket također nudi:

  • An tvrditi paket koji pruža korisne metode za pisanje prijateljskih, čitljivih testova.
  • A zahtijevati paket sličan tvrditi paket za vraćanje Booleovih rezultata.
  • A svita paket za testne pakete sa strukturama.

Svjedočenje se proteže na testiranje paket, a možete koristiti idi testirati naredbu za pokretanje testova napisanih paketom Testify.

Testify podržava Go verzije od 1.13. Ovom naredbom možete dodati paket kao ovisnost projekta:

ići dobiti github.com/stretchr/testify

Evo jednostavnog testa tvrdnje s paketom Testify tvrditi paket:

paket glavni

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

// ime funkcije bi prema konvenciji trebalo biti "Nešto".
funkTestSomething(t *testiranje. T) {
// potvrđivanje jednakosti
tvrditi. Jednako (t, 123, 123, "trebaju biti jednaki")

// utvrđivanje nejednakosti
tvrditi. Nije jednako (t, 123, 456, "ne bi trebali biti jednaki")
}

The TestSomething testna funkcija uzima strukturu vrste testiranja testiranje paket kao argument. The Jednak i Nejednak metode su za tvrdnje temeljene na jednakosti i nejednakosti iz Testifyja tvrditi paket.

Paket GoConvey

GoConvey je Go alat za testiranje pripremljen za izražajnost nad testiranje paket. Uključuje terminal (CLI) i preglednik (GUI) testiranje funkcionalnosti.

Paket GoConvey integrira se s testiranje paket koji pruža web korisničko sučelje za rad s izvornim Go testovima. Također uključuje funkcionalnost za regresijske testove, prilagodljive izlaze i generiranje testnog koda. Možete automatski pokrenuti testove, pristupiti formatima pokrivenosti u HTML-u i prilagoditi GUI.

Pokrenite ovu naredbu na terminalu vašeg radnog prostora Go da biste instalirali paket Go Convey.

ići dobiti github.com/smartystreets/goconvey

Evo jednostavnog primjera pisanja testova s ​​paketom GoConvey.

paket glavni

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

funkTestSomething(t *testiranje. T) {
// Proslijedite samo t u pozive najviše razine Convey
Convey("Deklariraj varijablu", t, funk() {
x := 1

Prenesi("povećaj varijablu", funk() {
x++

Convey("potvrđivati ​​jednakost", funk() {
Dakle (x, ShouldEqual, 2)
})
})
})
}

Morat ćete uvesti prenijeti pakirati pomoću notacije točka za test.

Funkcija Prijenos iz Prenijeti paket pomaže u određivanju opsega testa. Zadnji Prenijeti poziv funkcije u primjeru koda potvrđuje jednakost između x varijabla i 2, koristiti ShouldEqual funkcija.

Paket HTTP Expect

The HTTP Očekivati paket je jednostavan za korištenje, koncizan, deklarativan paket za Go-ovo end-to-end HTTP i REST API testiranje. Možete ga koristiti za postupnu izradu HTTP zahtjeva i rekurzivnu provjeru odgovora i njihovih nosivosti.

The httpočekivati paket je skup ulančanih graditelja za HTTP zahtjeve i tvrdnje o HTTP odgovorima i nosivosti. Izgrađen je na http, testiranje, i drugi paketi. Paket također dobro funkcionira s ugrađenim httptest paket.

httpočekivati pruža funkcionalnost za izradu zahtjeva s konstrukcijom URL-a, zaglavlja, kolačića i sadržaja. Obrađuje tvrdnje odgovora, tvrdnje o korisnom sadržaju, lijepo ispisivanje i WebSockets.

Pokrenite ovu naredbu u terminalu vašeg radnog direktorija da biste instalirali httpočekivati paket.

ići dobiti github.com/gavv/httpexpect

Evo jednostavnog primjera testiranja funkcije rukovatelja s httpočekivati paket.

paket glavni

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

funkprimjerHandler()http.rukovatelj {
povratak http. HandlerFunc(funk(pisac http. ResponseWriter, zahtjev *http. Zahtjev) {
fmt. Fprintln (pisac, "Hello World")
})
}

funkTestexampleHandler(t *testiranje. T) {
// kreiraj http. rukovatelj
rukovatelj := primjerHandler()

// pokretanje poslužitelja koristeći httptest
poslužitelj := httptest. NewServer (rukovatelj)
odgoditi poslužitelj. Zatvoriti()

// kreiranje http očekivane instance
očekivati ​​:= httpočekivati. Novo (t, server. URL)

// radi li?
očekivati. DOBITI("/").
Očekivati().
Status (http. StatusOK).JSON().Array().Empty()
}

The primjerHandler funkcija rukovatelja vraća HTTP rukovatelj za httpočekivati paket. The TestexampleHandler funkcija deklarira instancu funkcije rukovatelja. Zatim stvara novi poslužitelj za testiranje krajnje točke s httptest paket.

The očekivati varijabla je tvoja httpočekivati instanca koja pogađa DOBITI korijenski put krajnje točke zahtjeva na poslužitelju. The Status funkcija se vraća statusni kod (u ovom slučaju, 200) ako test uspije.

Napišite sveobuhvatne i intuitivne testove

Testovi uvelike pomažu u procjeni integriteta vaše aplikacije, a postoji mnogo uzoraka testiranja i metoda koje možete koristiti za svoje programe. U srži vašeg radnog tijeka testiranja trebali biste napisati intuitivne testove koje možete poboljšati kako se vaši programi mijenjaju tijekom vremena.