Softwaretest er en proces, der evaluerer programmernes metrik ved hjælp af værktøjer, scripts eller manuelt.

Test er en integreret del af softwareudviklingscyklussen. Omfattende test giver dybdegående information om integriteten af ​​din applikation.

Du kan forhindre og rette fejl ved at skrive test, evaluere programmets ydeevne og automatisere arbejdsgange.

Kom godt i gang med Test in Go

Go-standardbiblioteket giver en udvikling afprøvning pakke. Det afprøvning pakken har benchmarking, fuzzing, skipping, sub-test, sub-benchmarking og andre funktioner.

Det er nemt at teste med denne pakke. Her er en simpel teststruktur, der vil tjene som model for testen:

type Sager struktur {
// det forventede output af testen
forventet int

// outputtet af funktionen
faktiske int

// den værdi, du sender til funktionen
argument snor
}

Her er en simpel funktion, der konverterer strenge til heltal. Din test vil teste denne funktion.

importere (
"strconv"
)

funcStringToInteger(str snor)int {
heltal, fejl := strconv. Atoi (str)

hvis fejl!= nul {
Vend tilbage0
}

Vend tilbage heltal
}

instagram viewer

Det StringToInteger funktion vender tilbage 0 hvis der er en fejl ved konvertering og hele tallet, hvis der ikke er fejl.

Her er en testfunktion til StringToInteger:

funcTestStringToInteger(test *test. T) {
forventetInt := StringToInteger("3")

caseInstance := Cases {
forventet: forventetInt,
faktiske: 3,
}

hvis caseInstance.expected == caseInstance.actual {
// noget kode her
} andet {
prøve. Svigte()
}
}

Det TestStringToInteger testfunktionen accepterer en afprøvning. T objekt som sit argument. Det forventetInt variabel indeholder resultatet af strengkonverteringen. Det caseInstance variabel er den instansierede Cases-struktur for testen. Det hvis erklæring sammenligner de forventede og faktiske værdier.

Det Svigte metode returnerer en mislykket test i else-sætningen, hvis værdierne ikke er ens.

Go giver en prøve kommando til at automatisere og hente indsigt i dine tests og programmer.

 prøve
hjælp til test

Hjælpesiden giver detaljerede oplysninger om hvordan gå til test arbejder:

Go-økosystemet er hjemsted for mange biblioteker, der gør testning mere tilgængelig og fleksibel. Der er masser af funktionalitet ud over afprøvning pakke inkl regression og enhedstest.

Vidnesbyrd-pakken

Testify-pakken er en af ​​de mest populære Go-frameworks til at teste pakker. Det giver værktøjer, du skal bruge til at skrive effektive tests, med nemme påstande, hån og testsuitefunktioner.

Testify er velegnet til testdrevet udvikling, da pakken giver en håne pakke. Dette giver en mekanisme til at skrive falske objekter, som du kan bruge i stedet for rigtige objekter i test.

Pakken indeholder også:

  • An hævde pakke, der giver nyttige metoder til at skrive venlige, læsbare tests.
  • EN kræve pakke svarende til hævde pakke til returnering af booleske resultater.
  • EN suite pakke til testsuiter med strukturer.

Vidne strækker sig på afprøvning pakke, og du kan bruge gå til test kommando til at køre test skrevet med Testify-pakken.

Testify understøtter Go-versioner fra 1.13. Du kan tilføje pakken som en projektafhængighed med denne kommando:

 få github.com/stretchr/testify

Her er en simpel påstandstest med Testify-pakkens hævde pakke:

pakke vigtigste

importere (
"testning"
"github.com/stretchr/testify/assert" // kun påstå pakke
)

// funktionsnavn skal være "Noget" efter konvention
funcTest Noget(t *testning. T) {
// hævder ligestilling
hævde. Lige (t, 123, 123, "de burde være lige")

// hævder ulighed
hævde. NotEqual (t, 123, 456, "de burde ikke være lige")
}

Det Test Noget testfunktionen tager testtypens struktur af afprøvning pakke som argument. Det Lige og NotEqual metoder er for lighed og ulighedsbaserede påstande fra Testify's hævde pakke.

GoConvey-pakken

GoConvey er et Go-testværktøj, der er beregnet til udtryksevne over afprøvning pakke. Det omfatter terminal (CLI) og browser (GUI) test funktionalitet.

GoConvey-pakken integreres med afprøvning pakke, der giver en webbrugergrænseflade til at arbejde med native Go-tests. Det inkluderer også funktionalitet til regressionstest, brugerdefinerbare output og testkodegenerering. Du kan køre test automatisk, få adgang til dækningsformater i HTML og tilpasse GUI'en.

Kør denne kommando i terminalen på dit Go-arbejdsområde for at installere Go Convey-pakken.

 få github.com/smartystreets/goconvey

Her er et simpelt eksempel på at skrive test med GoConvey-pakken.

pakke vigtigste

importere (
. "github.com/smartystreets/goconvey/convey"
"testning"
)

funcTest Noget(t *testning. T) {
// Send kun t videre til formidlingsopkald på øverste niveau
Convey("Erklær variabel", t, func() {
x := 1

Convey("stigningsvariabel", func() {
x++

Convey("hævd ligestilling", func() {
Så (x, ShouldEqual, 2)
})
})
})
}

Du skal importere overbringe pakke ved hjælp af punktnotation til testen.

Convey-funktionen fra Overbringe pakken hjælper med test scoping. Den sidste Overbringe funktionskald i kodeeksemplet hævder lighed mellem x variabel og 2, bruger Bør Lige fungere.

HTTP Expect-pakken

Det HTTP Forvent pakke er en letanvendelig, kortfattet, deklarativ pakke til Go's end-to-end HTTP og REST API-testning. Du kan bruge det til at bygge HTTP-anmodninger trinvist og inspicere svar og deres nyttelast rekursivt.

Det httpforvent pakken er et sæt kædebare buildere til HTTP-anmodninger og påstande om HTTP-svar og nyttelast. Det er bygget på http, afprøvning, og andre pakker. Pakken fungerer også godt med det indbyggede httptest pakke.

httpforvent giver funktionalitet til anmodningsopbygning med URL-konstruktion, overskrifter, cookies og nyttelast. Det håndterer svarpåstande, nyttelastpåstande, smuk udskrivning og WebSockets.

Kør denne kommando i terminalen i dit arbejdsbibliotek for at installere httpforvent pakke.

 få github.com/gavv/httpexpect

Her er et simpelt eksempel på test af en handlerfunktion med httpforvent pakke.

pakke vigtigste

importere (
"fmt"
"github.com/gavv/httpexpect/v2"
"net/http"
"net/http/httptest"
"testning"
)

funceksempelHandler()http.Handler {
Vend tilbage http. HandlerFunc(func(forfatter http. ResponseWriter, anmod om *http. Anmodning) {
fmt. Fprintln (skribent, "Hello World")
})
}

funcTesteksempelHandler(t *testning. T) {
// opret http. Handler
handler := eksempelHandler()

// køre server ved hjælp af httptest
server := httptest. NewServer (handler)
udsætte server. Tæt()

// opret http forvente forekomst
forventer := httpforvent. Ny (t, server. URL)

// virker det?
forventer. FÅ("/").
Forventer().
Status (http. StatusOK).JSON().Array().Empty()
}

Det eksempelHandler handler-funktionen returnerer en HTTP-handler for httpforvent pakke. Det TesteksempelHandler funktion erklærer en forekomst af handlerfunktionen. Det opretter derefter en ny server til at teste slutpunktet med httptest pakke.

Det forventer variabel er din httpforvent instans, der rammer anmode om slutpunkts rodsti på serveren. Det Status funktion vender tilbage statuskoden (I dette tilfælde, 200), hvis testen lykkes.

Skriv omfattende og intuitive tests

Tests går langt i at evaluere integriteten af ​​din applikation, og der er mange testmønstre og metoder, du kan bruge til dine programmer. Kernen i dit test-workflow bør du skrive intuitive tests, som du kan forbedre, efterhånden som dine programmer ændrer sig over tid.