Tests sind ein essenzieller Bestandteil der Softwareentwicklung, um sicherzustellen, dass Ihr Code korrekt und zuverlässig funktioniert.
Go hat ein integriertes Testframework, das einfach zu verwenden und
in die Sprache integriert ist. Testdateien enden in der Regel auf
_test.go und befinden sich im selben Verzeichnis wie der zu
testende Code.
Ein Unit-Test in Go wird mit der Funktion TestName
definiert, wobei Name ein beschreibender Name für den Test
ist. Hier ein einfaches Beispiel:
package mymath
import "testing"
func TestAdd(t *testing.T) {
result := Add(2, 3)
if result != 5 {
t.Errorf("Add(2, 3) = %d; want 5", result)
}
}In diesem Beispiel:
mymath_test.go.testing, das Funktionen und
Typen für das Schreiben von Tests bereitstellt.TestAdd, die die Funktion
Add testet.Add-Funktion. Wenn das Ergebnis nicht 5 ist,
verwenden wir t.Errorf, um einen Fehler anzuzeigen.Um Tests auszuführen, verwenden Sie das Kommando go test
im Terminal:
go testDies führt alle Tests in Ihrem Paket aus und zeigt die Ergebnisse an.
Tabellengetriebene Tests sind eine nützliche Technik, um mehrere Eingaben und erwartete Ausgaben in einem einzigen Testfall zu überprüfen. Hier ein Beispiel:
package mymath
import "testing"
func TestAdd(t *testing.T) {
tests := []struct {
a, b int
want int
}{
{2, 3, 5},
{1, 1, 2},
{0, 0, 0},
}
for _, tt := range tests {
t.Run(fmt.Sprintf("Add(%d,%d)", tt.a, tt.b), func(t *testing.T) {
got := Add(tt.a, tt.b)
if got != tt.want {
t.Errorf("Add(%d, %d) = %d; want %d", tt.a, tt.b, got, tt.want)
}
})
}
}In diesem Beispiel:
t.Run, um jeden
Testfall als Subtest auszuführen. Dies ermöglicht detailliertere
Fehlermeldungen und eine bessere Strukturierung der Tests.Go unterstützt auch Benchmark-Tests, um die Leistung Ihres Codes zu
messen. Benchmark-Tests verwenden die Funktion
BenchmarkName. Hier ein Beispiel:
package mymath
import "testing"
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(2, 3)
}
}In diesem Beispiel:
BenchmarkAdd, die die
Leistung der Funktion Add misst.Add b.N-mal auszuführen. Der Wert von
b.N wird von der Testumgebung bestimmt und hängt von der
Laufzeit des Tests ab.Um Benchmark-Tests auszuführen, verwenden Sie das Kommando
go test -bench .:
go test -bench .Dies führt alle Benchmark-Tests in Ihrem Paket aus und zeigt die Ergebnisse an.
Um die Testabdeckung Ihres Codes zu überprüfen, verwenden Sie das
Kommando go test -cover:
go test -coverDies zeigt den Prozentsatz des Codes an, der von Ihren Tests
abgedeckt wird. Sie können auch detailliertere Berichte mit
go test -coverprofile=coverage.out und
go tool cover -html=coverage.out erstellen:
go test -coverprofile=coverage.out
go tool cover -html=coverage.outDies generiert eine HTML-Datei, die eine detaillierte Übersicht über die Testabdeckung Ihres Codes bietet.