Softwaretests sind ein Prozess, der die Metriken von Programmen mithilfe von Tools, Skripten oder manuell auswertet.

Testen ist ein integraler Bestandteil des Softwareentwicklungszyklus. Umfassende Tests liefern detaillierte Informationen über die Integrität Ihrer Anwendung.

Sie können Fehler verhindern und beheben, indem Sie Tests schreiben, die Programmleistung bewerten und Arbeitsabläufe automatisieren.

Erste Schritte mit dem Testen in Go

Die Go-Standardbibliothek bietet eine sich entwickelnde testen Paket. Das testen Paket verfügt über Benchmarking, Fuzzing, Skipping, Sub-Testing, Sub-Benchmarking und andere Funktionalitäten.

Das Testen mit diesem Paket ist einfach. Hier ist eine einfache Teststruktur, die als Modell für den Test dienen wird:

Typ Fälle Struktur {
// die erwartete Ausgabe des Tests
erwartet int

// die Ausgabe der Funktion
tatsächlich int

// der Wert, den Sie an die Funktion übergeben
Streit Schnur
}

Hier ist eine einfache Funktion, die Strings in ganze Zahlen umwandelt. Ihr Test wird diese Funktion testen.

importieren (
"strconv"
)

FunkStringToInteger(str Schnur)int {
ganze Zahl, err := strconv. Atoi (str)

wenn äh != Null {
Rückkehr0
}

Rückkehr ganze Zahl
}

Das StringToInteger Funktion zurück 0 wenn bei der Konvertierung ein Fehler aufgetreten ist, und die Ganzzahl, wenn keine Fehler vorliegen.

Hier ist eine Testfunktion für StringToInteger:

FunkTestStringToInteger(testen *testen. T) {
erwartetInt := StringToInteger("3")

caseInstance := Fälle {
erwartet: erwartetInt,
tatsächlich: 3,
}

wenn caseInstance.erwartet == caseInstance.actual {
// etwas Code hier
} anders {
Prüfung. Scheitern()
}
}

Das TestStringToInteger Testfunktion akzeptiert a testen. T Objekt als Argument. Das erwartetInt Die Variable enthält das Ergebnis der Zeichenfolgenkonvertierung. Das FallInstanz Variable ist die instanziierte Cases-Struktur für den Test. Das wenn Anweisung vergleicht die erwarteten und tatsächlichen Werte.

Das Scheitern -Methode gibt einen fehlgeschlagenen Test in der else-Anweisung zurück, wenn die Werte nicht gleich sind.

Go bietet a Prüfung Befehl zum Automatisieren und Abrufen von Einblicken in Ihre Tests und Programme.

gehen Prüfung
gehen Test helfen

Auf der Hilfeseite finden Sie detaillierte Informationen zur Vorgehensweise test gehen funktioniert:

Das Go-Ökosystem beherbergt viele Bibliotheken, die das Testen zugänglicher und flexibler machen. Es gibt viele Funktionen darüber hinaus testen Paket, inkl Regression und Unit-Tests.

Das Testify-Paket

Das Testify-Paket ist eines der beliebtesten Go-Frameworks zum Testen von Paketen. Es bietet Tools, die Sie benötigen, um effiziente Tests zu schreiben, mit einfachen Assertions-, Mocking- und Testing-Suite-Funktionen.

Testify eignet sich für testgetriebene Entwicklung, da das Paket a spotten Paket. Dies bietet einen Mechanismus zum Schreiben von Scheinobjekten, die Sie beim Testen anstelle von echten Objekten verwenden können.

Das Paket bietet außerdem:

  • Ein behaupten Paket, das hilfreiche Methoden zum Schreiben freundlicher, lesbarer Tests bereitstellt.
  • EIN benötigen Paket ähnlich dem behaupten Paket zum Zurückgeben von booleschen Ergebnissen.
  • EIN Suite Paket für Testsuiten mit Strukturen.

Testify erstreckt sich auf die testen Paket, und Sie können die verwenden test gehen Befehl zum Ausführen von Tests, die mit dem Testify-Paket geschrieben wurden.

Testify unterstützt Go-Versionen von 1.13. Sie können das Paket mit diesem Befehl als Projektabhängigkeit hinzufügen:

gehen Holen Sie sich github.com/stretchr/testify

Hier ist ein einfacher Behauptungstest mit den Testify-Paketen behaupten Paket:

Paket hauptsächlich

importieren (
"testen"
"github.com/stretchr/testify/assert" // Nur Paket bestätigen
)

// Funktionsname sollte per Konvention "Etwas" sein
FunkTeste etwas(t *testen. T) {
// Behauptung der Gleichheit
behaupten. Gleich (t, 123, 123, "sie sollten gleich sein")

// Behauptung von Ungleichheit
behaupten. Ungleich (t, 123, 456, "sie sollten nicht gleich sein")
}

Das Teste etwas Die Testfunktion nimmt die Testtypstruktur der testen Paket als Argument. Das Gleich und Nicht gleich Methoden sind für auf Gleichheit und Ungleichheit basierende Behauptungen von Testify behaupten Paket.

Das GoConvey-Paket

GoConvey ist ein Go-Test-Tool, das auf Ausdrucksstärke über dem ausgelegt ist testen Paket. Es enthält Terminal (CLI) und Browser (GUI) Funktionalität testen.

Das GoConvey-Paket integriert sich in die testen Paket, das eine Web-Benutzeroberfläche für die Arbeit mit nativen Go-Tests bereitstellt. Es enthält auch Funktionen für Regressionstests, anpassbare Ausgaben und Testcodegenerierung. Sie können Tests automatisch ausführen, auf Coverage-Formate in HTML zugreifen und die GUI anpassen.

Führen Sie diesen Befehl im Terminal Ihres Go-Arbeitsbereichs aus, um das Go Convey-Paket zu installieren.

gehen Holen Sie sich github.com/smartystreets/goconvey

Hier ist ein einfaches Beispiel für das Schreiben von Tests mit dem GoConvey-Paket.

Paket hauptsächlich

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

FunkTeste etwas(t *testen. T) {
// t nur an Convey-Aufrufe der obersten Ebene übergeben
Convey("Variable deklarieren", t, Funk() {
x := 1

Convey("Variable erhöhen", Funk() {
x++

Convey("Gleichheit behaupten", Funk() {
Also (x, SollteGleich, 2)
})
})
})
}

Sie müssen die importieren vermitteln Paket mit Punktnotation für den Test.

Die Convey-Funktion aus dem Vermitteln Paket hilft beim Testumfang. Das Letzte Vermitteln Der Funktionsaufruf im Codebeispiel bestätigt die Gleichheit zwischen der x variabel u 2, Verwendung der Sollte gleich sein Funktion.

Das HTTP-Expect-Paket

Das HTTP-Erwartung package ist ein benutzerfreundliches, prägnantes, deklaratives Paket für die End-to-End-HTTP- und REST-API-Tests von Go. Sie können es verwenden, um HTTP-Anforderungen inkrementell zu erstellen und Antworten und ihre Nutzlasten rekursiv zu untersuchen.

Das httperwarten -Paket ist ein Satz verkettbarer Builder für HTTP-Anforderungen und Assertionen für HTTP-Antworten und -Nutzlasten. Es ist auf dem gebaut http, testen, und andere Pakete. Das Paket funktioniert auch gut mit dem eingebauten httptest Paket.

httperwarten bietet Funktionen für die Anforderungserstellung mit URL-Konstruktion, Headern, Cookies und Payloads. Es verarbeitet Antwort-Assertionen, Payload-Assertionen, hübsches Drucken und WebSockets.

Führen Sie diesen Befehl im Terminal Ihres Arbeitsverzeichnisses aus, um die httperwarten Paket.

gehen Holen Sie sich github.com/gavv/httpexpect

Hier ist ein einfaches Beispiel für das Testen einer Handler-Funktion mit der httperwarten Paket.

Paket hauptsächlich

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

FunkexampleHandler()http.Handler {
Rückkehr http. HandlerFunc(Funk(Autor http. ResponseWriter, Anfrage *http. Anfrage) {
fmt. Fprintln (Autor, „Hello World“)
})
}

FunkTestbeispielHandler(t *testen. T) {
// http erstellen. Handler
Handler := exampleHandler()

// Server mit httptest ausführen
server := httptest. NewServer (Handler)
verschieben Server. Nah dran()

// HTTP-Expect-Instanz erstellen
erwarten := httperwarten. Neu (t, server. URL)

// funktioniert es?
erwarten von. ERHALTEN("/").
Erwarten von().
Stand (http. StatusOK).JSON().Array().Empty()
}

Das exampleHandler handler-Funktion gibt einen HTTP-Handler für die zurück httperwarten Paket. Das TestbeispielHandler function deklariert eine Instanz der Handler-Funktion. Anschließend erstellt es einen neuen Server zum Testen des Endpunkts mit dem httptest Paket.

Das erwarten von Variable ist Ihre httperwarten Instanz, die die trifft ERHALTEN Endpunkt-Root-Pfad auf dem Server anfordern. Das Status Funktion zurück der Statuscode (in diesem Fall, 200), wenn der Test erfolgreich ist.

Schreiben Sie umfassende und intuitive Tests

Tests leisten einen großen Beitrag zur Bewertung der Integrität Ihrer Anwendung, und es gibt viele Testmuster und -methoden, die Sie für Ihre Programme verwenden können. Im Mittelpunkt Ihres Test-Workflows sollten Sie intuitive Tests schreiben, die Sie verbessern können, wenn sich Ihre Programme im Laufe der Zeit ändern.