Softwaretesten is een proces dat de statistieken van programma's evalueert met behulp van tools, scripts of handmatig.

Testen is een integraal onderdeel van de softwareontwikkelingscyclus. Uitgebreide tests bieden diepgaande informatie over de integriteit van uw applicatie.

U kunt bugs voorkomen en oplossen door tests te schrijven, programmaprestaties te evalueren en workflows te automatiseren.

Aan de slag met testen in Go

De Go-standaardbibliotheek biedt een evoluerend testen pakket. De testen pakket heeft benchmarking, fuzzing, skipping, subtesten, subbenchmarking en andere functionaliteiten.

Testen met dit pakket is eenvoudig. Hier is een eenvoudige teststructuur die als model voor de test zal dienen:

type Gevallen structureren {
// de verwachte output van de test
verwacht int

// de uitvoer van de functie
feitelijk int

// de waarde die je doorgeeft aan de functie
argument snaar
}

Hier is een eenvoudige functie die tekenreeksen naar gehele getallen converteert. Uw test zal deze functie testen.

importeren
instagram viewer
(
"strconv"
)

funcTekenreeksNaarInteger(str snaar)int {
geheel getal, err := strconv. Atoi (str)

als fout != nul {
opbrengst0
}

opbrengst geheel getal
}

De TekenreeksNaarInteger functie retourneert 0 als er een fout is bij de conversie en het gehele getal als er geen fouten zijn.

Hier is een testfunctie voor StringToInteger:

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

caseInstance := Cases {
verwacht: verwachtInt,
werkelijk: 3,
}

als caseInstance.expected == caseInstance.actual {
// hier wat code
} anders {
testen. Mislukking()
}
}

De TestStringToInteger testfunctie accepteert a testen. T object als argument. De verwachtInt variabele bevat het resultaat van de stringconversie. De caseInstance variabele is de geïnstantieerde Cases-struct voor de test. De als verklaring vergelijkt de verwachte en werkelijke waarden.

De Mislukking methode retourneert een mislukte test in de else-instructie als de waarden niet gelijk zijn.

Go biedt een testen commando voor het automatiseren en ophalen van inzichten in uw tests en programma's.

Gaan testen
Gaan help testen

De helppagina biedt gedetailleerde informatie over hoe: ga testen werken:

Het Go-ecosysteem herbergt veel bibliotheken die testen toegankelijker en flexibeler maken. Er is veel functionaliteit buiten de testen pakket, inclusief: regressie en unit testing.

Het Testify-pakket

Het Testify-pakket is een van de meest populaire Go-frameworks voor het testen van pakketten. Het biedt tools die je nodig hebt om efficiënte tests te schrijven, met eenvoudige beweringen, spot- en testsuitefuncties.

Testify is geschikt voor testgestuurde ontwikkeling omdat het pakket een bespotten pakket. Dit biedt een mechanisme voor het schrijven van nepobjecten die u bij het testen in plaats van echte objecten kunt gebruiken.

Het pakket biedt ook:

  • Een beweren pakket dat handige methoden biedt voor het schrijven van vriendelijke, leesbare tests.
  • EEN vereisen pakket vergelijkbaar met de beweren pakket voor het retourneren van booleaanse resultaten.
  • EEN suite pakket voor testsuites met structs.

Testify breidt uit op de testen pakket, en u kunt de ga testen commando om tests uit te voeren die zijn geschreven met het Testify-pakket.

Testify ondersteunt Go-versies vanaf 1.13. U kunt het pakket als projectafhankelijkheid toevoegen met deze opdracht:

Gaan download github.com/stretchr/testify

Hier is een eenvoudige beweringstest met het Testify-pakket beweren pakket:

pakket hoofd

importeren (
"testen"
"github.com/stretchr/testify/asset" // alleen pakket bevestigen
)

// functienaam moet volgens afspraak "Iets" zijn
funcTestIets(t * testen. T) {
// gelijkheid beweren
beweren. gelijk (t, 123, 123, "ze moeten gelijk zijn")

// beweren ongelijkheid
beweren. Niet gelijk (t, 123, 456, "ze mogen niet gelijk zijn")
}

De TestIets testfunctie neemt de testtypestructuur van de testen pakket als argument. De Gelijkwaardig en Niet gelijk methoden zijn voor op gelijkheid en ongelijkheid gebaseerde beweringen van Testify's beweren pakket.

Het GoConvey-pakket

GoConvey is een Go-testtool die is voorbereid op expressiviteit over de testen pakket. Het bevat terminal (CLI) en browser (GUI) functionaliteit testen.

Het GoConvey-pakket integreert met de testen pakket, dat een webgebruikersinterface biedt voor het werken met native Go-tests. Het bevat ook functionaliteit voor regressietests, aanpasbare outputs en het genereren van testcodes. U kunt automatisch tests uitvoeren, dekkingsindelingen in HTML openen en de GUI aanpassen.

Voer deze opdracht uit in de terminal van uw Go-werkruimte om het Go Convey-pakket te installeren.

Gaan download github.com/smartystreets/goconvey

Hier is een eenvoudig voorbeeld van het schrijven van tests met het GoConvey-pakket.

pakket hoofd

importeren (
. "github.com/smartystreets/goconvey/convey"
"testen"
)

funcTestIets(t * testen. T) {
// Geef t alleen door aan Convey-oproepen op het hoogste niveau
Convey("Declareer variabele", t, func() {
x := 1

Convey("variabele verhogen", func() {
x++

Convey("beweer gelijkheid", func() {
Dus (x, ShouldEqual, 2)
})
})
})
}

U moet de. importeren overdragen pakket met puntnotatie voor de test.

De Convey-functie van de Overdragen pakket helpt bij het afbakenen van tests. De laatste Overdragen functieaanroep in het codevoorbeeld beweert gelijkheid tussen de x variabel en 2, de... gebruiken ShouldEqual functie.

Het HTTP Verwacht-pakket

De HTTP verwachten package is een gebruiksvriendelijk, beknopt, declaratief pakket voor Go's end-to-end HTTP- en REST API-tests. U kunt het gebruiken om stapsgewijs HTTP-verzoeken op te bouwen en reacties en hun payloads recursief te inspecteren.

De httpverwachten package is een set chainable builders voor HTTP-verzoeken en beweringen op HTTP-reacties en payloads. Het is gebouwd op de http, testen, en andere pakketten. Het pakket werkt ook goed met de ingebouwde httptest pakket.

httpverwachten biedt functionaliteit voor het bouwen van verzoeken met URL-constructie, headers, cookies en payloads. Het verwerkt responsbeweringen, payload-beweringen, mooie afdrukken en WebSockets.

Voer deze opdracht uit in de terminal van uw werkmap om de. te installeren httpverwachten pakket.

Gaan krijg github.com/gavv/httpexpect

Hier is een eenvoudig voorbeeld van het testen van een handlerfunctie met de httpverwachten pakket.

pakket hoofd

importeren (
"fmt"
"github.com/gavv/httpexpect/v2"
"net/http"
"net/http/httptest"
"testen"
)

funcvoorbeeldHandler()http.Handler {
opbrengst http. HandlerFunc(func(schrijver http. ResponseWriter, verzoek *http. Verzoek) {
fmt. Fprintln (schrijver, "Hallo wereld")
})
}

funcTestvoorbeeldHandler(t * testen. T) {
// maak http aan. Handler
handler := voorbeeldHandler()

// voer de server uit met httptest
server := httptest. Nieuwe server (verwerker)
verschuiven server. Dichtbij()

// maak http verwacht instantie
verwachten := http verwachten. Nieuw (t, server. URL)

// werkt het?
verwachten. KRIJGEN("/").
Verwachten().
Staat (http. StatusOK).JSON().Array().Leeg()
}

De voorbeeldHandler handler-functie retourneert een HTTP-handler voor de httpverwachten pakket. De TestvoorbeeldHandler functie declareert een instantie van de handlerfunctie. Vervolgens wordt een nieuwe server gemaakt om het eindpunt te testen met de httptest pakket.

De verwachten variabele is jouw httpverwachten instantie die de raakt KRIJGEN vraag het hoofdpad van het eindpunt op de server aan. De Toestand functie retourneert de statuscode: (in dit geval, 200) als de test slaagt.

Schrijf uitgebreide en intuïtieve tests

Tests gaan een lange weg bij het evalueren van de integriteit van uw toepassing, en er zijn veel testpatronen en -methoden die u voor uw programma's kunt gebruiken. In de kern van uw testworkflow moet u intuïtieve tests schrijven die u kunt verbeteren naarmate uw programma's in de loop van de tijd veranderen.