Programvaretesting er en prosess som evaluerer beregningene til programmer ved hjelp av verktøy, skript eller manuelt.

Testing er en integrert del av programvareutviklingssyklusen. Omfattende testing gir dybdeinformasjon om integriteten til applikasjonen din.

Du kan forhindre og fikse feil ved å skrive tester, evaluere programytelse og automatisere arbeidsflyter.

Komme i gang med Testing in Go

Go-standardbiblioteket gir en utvikling testing pakke. De testing pakken har benchmarking, fuzzing, hopper, sub-testing, sub-benchmarking og andre funksjoner.

Det er enkelt å teste med denne pakken. Her er en enkel teststruktur som vil tjene som en modell for testen:

type Saker struktur {
// det forventede resultatet av testen
forventet int

// utgangen av funksjonen
faktiske int

// verdien du sender til funksjonen
argument streng
}

Her er en enkel funksjon som konverterer strenger til heltall. Testen din vil teste denne funksjonen.

import (
"strconv"
)

funcStringToInteger(str streng)int {
heltall, feil := strconv. Atoi (str)

hvis feil!= null {
komme tilbake0
}

komme tilbake heltall
}

instagram viewer

De StringToInteger funksjonen returnerer 0 hvis det er en feil ved konvertering og heltall hvis det ikke er feil.

Her er en testfunksjon for StringToInteger:

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

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

hvis caseInstance.expected == caseInstance.actual {
// litt kode her
} ellers {
test. Mislykket()
}
}

De TestStringToInteger testfunksjonen aksepterer en testing. T objekt som argument. De forventetInt variabelen inneholder resultatet av strengkonverteringen. De caseInstance variabel er den instansierte Cases-strukturen for testen. De hvis statement sammenligner forventede og faktiske verdier.

De Mislykket metoden returnerer en mislykket test i else-setningen hvis verdiene ikke er like.

Go gir en test kommando for å automatisere og hente innsikt i testene og programmene dine.

 test
hjelpe test

Hjelpesiden gir detaljert informasjon om hvordan gå test virker:

Go-økosystemet er hjemsted for mange biblioteker som gjør testing mer tilgjengelig og fleksibel. Det er rikelig med funksjonalitet utover testing pakke, inkludert regresjon og enhetstesting.

Vitne-pakken

Testify-pakken er en av de mest populære Go-rammene for testing av pakker. Den gir verktøy du trenger for å skrive effektive tester, med enkle påstander, hån og testsuitefunksjoner.

Testify er egnet for testdrevet utvikling siden pakken gir en håne pakke. Dette gir en mekanisme for å skrive falske objekter som du kan bruke i stedet for ekte objekter i testing.

Pakken inneholder også:

  • An hevde pakke som gir nyttige metoder for å skrive vennlige, lesbare tester.
  • EN krever pakke som ligner på hevde pakke for å returnere boolske resultater.
  • EN suite pakke for testsuiter med strukturer.

Vitne strekker seg på testing pakken, og du kan bruke gå test kommando for å kjøre tester skrevet med Testify-pakken.

Testify støtter Go-versjoner fra 1.13. Du kan legge til pakken som en prosjektavhengighet med denne kommandoen:

 skaff deg github.com/stretchr/testify

Her er en enkel påstandstest med Testify-pakken hevde pakke:

pakke hoved-

import (
"testing"
"github.com/stretchr/testify/assert" // kun påstandspakke
)

// funksjonsnavn skal være "Noe" etter konvensjon
funcTest Noe(t *testing. T) {
// hevder likestilling
hevde. lik (t, 123, 123, "de burde være like")

// hevder ulikhet
hevde. NotEqual (t, 123, 456, "de skal ikke være like")
}

De Test Noe testfunksjonen tar testtypestrukturen til testing pakke som argument. De Lik og Ikke lik metoder er for likhet og ulikhet-baserte påstander fra Testify's hevde pakke.

GoConvey-pakken

GoConvey er et Go-testingsverktøy basert på ekspressivitet over testing pakke. Det inkluderer terminal (CLI) og nettleser (GUI) testing av funksjonalitet.

GoConvey-pakken integreres med testing pakke, som gir et nettbrukergrensesnitt for arbeid med native Go-tester. Den inkluderer også funksjonalitet for regresjonstester, tilpassbare utganger og generering av testkode. Du kan kjøre tester automatisk, få tilgang til dekningsformater i HTML og tilpasse GUI.

Kjør denne kommandoen i terminalen på Go-arbeidsområdet for å installere Go Convey-pakken.

 skaff deg github.com/smartystreets/goconvey

Her er et enkelt eksempel på å skrive tester med GoConvey-pakken.

pakke hoved-

import (
. "github.com/smartystreets/goconvey/convey"
"testing"
)

funcTest Noe(t *testing. T) {
// Send kun t til overordnede samtaler
Convey("Deklarer variabel", t, func() {
x := 1

Convey("økningsvariabel", func() {
x++

Convey("hevde likhet", func() {
Så (x, ShouldEqual, 2)
})
})
})
}

Du må importere Formidle pakke med punktnotasjon for testen.

Formidlingsfunksjonen fra Formidle pakken hjelper med testomfang. Den siste Formidle funksjonskall i kodeeksemplet hevder likhet mellom x variabel og 2, bruker Bør lik funksjon.

HTTP Expect-pakken

De HTTP Forvent pakken er en brukervennlig, kortfattet, deklarativ pakke for Gos ende-til-ende HTTP- og REST API-testing. Du kan bruke den til å bygge HTTP-forespørsler trinnvis og inspisere svar og deres nyttelast rekursivt.

De httpforvent pakken er et sett med kjedebare byggere for HTTP-forespørsler og påstander om HTTP-svar og nyttelast. Den er bygget på http, testing, og andre pakker. Pakken fungerer også bra med det innebygde httptest pakke.

httpforvent gir funksjonalitet for forespørselsbygging med URL-konstruksjon, overskrifter, informasjonskapsler og nyttelast. Den håndterer svarpåstander, nyttelastpåstander, pen utskrift og WebSockets.

Kjør denne kommandoen i terminalen i arbeidskatalogen din for å installere httpforvent pakke.

 skaff deg github.com/gavv/httpexpect

Her er et enkelt eksempel på å teste en behandlerfunksjon med httpforvent pakke.

pakke hoved-

import (
"fmt"
"github.com/gavv/httpexpect/v2"
"net/http"
"net/http/httptest"
"testing"
)

funceksempelHandler()http.Handler {
komme tilbake http. HandlerFunc(func(skribent http. ResponseWriter, be om *http. Be om) {
fmt. Fprintln (forfatter, "Hello World")
})
}

funcTesteksempelHandler(t *testing. T) {
// opprette http. Handler
handler := eksempelHandler()

// kjør server ved hjelp av httptest
server := httptest. NewServer (behandler)
utsette server. Lukk()

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

// fungerer det?
forvente. FÅ("/").
Forvent().
Status (http. StatusOK).JSON().Array().Empty()
}

De eksempelHandler handler-funksjonen returnerer en HTTP-behandler for httpforvent pakke. De TesteksempelHandler funksjon erklærer en forekomst av behandlerfunksjonen. Den oppretter deretter en ny server for å teste endepunktet med httptest pakke.

De forvente variabelen er din httpforvent forekomst som treffer be om endepunktrotbane på serveren. De Status funksjonen returnerer statuskoden (i dette tilfellet, 200) hvis testen lykkes.

Skriv omfattende og intuitive tester

Tester går langt i å evaluere integriteten til applikasjonen din, og det er mange testmønstre og metoder du kan bruke for programmene dine. I kjernen av testarbeidsflyten bør du skrive intuitive tester som du kan forbedre etter hvert som programmene dine endres over tid.