Go-Sprache ist eine schnelle, sichere und einfache Programmiersprache, unterstützt auch Tests und ist sehr benutzerfreundlich. Beim Entwickeln und Testen in Golang kann die Qualität und Genauigkeit des Codes verbessert werden, wodurch Entwicklern die Iteration während der Projektentwicklung erleichtert wird.
In diesem Artikel werden die Testmethoden in Golang vorgestellt, einschließlich Unit-Tests, Benchmark-Tests, Leistungstests und Grenztests. Wir werden gängige Testfälle und Testtechniken teilen, um den Lesern zu helfen, Golang-Testmethoden und -fähigkeiten besser zu verstehen und die Entwicklungseffizienz und -qualität zu verbessern.
1. Unit-Test
1. Grundgerüst des Testfalls
Das Grundgerüst des Testfalls ist:
func TestFunctionName(t *testing.T) { // testing function }
package main import "testing" func Sum(x int, y int) int { return x + y } func TestSum(t *testing.T) { got := Sum(1, 2) want := 3 if got != want { t.Errorf("Sum(1,2) = %d; want %d", got, want) } }
--- FAIL: TestSum (0.00s) main_test.go:11: Sum(1,2) = 4; want 3 FAIL exit status 1 FAIL command-line-arguments 0.005s
2 , Testfallbenennung und -organisation
Den Testmethodennamen von Golang muss „Test“ vorangestellt werden, damit das Testframework sie automatisch identifizieren und ausführen kann, wenn der Befehl „go test“ ausgeführt wird. Um gleichzeitig Konflikte mit anderen Testmethoden mit demselben Namen zu vermeiden, sollte die Benennung von Testmethoden die Eindeutigkeit gewährleisten.
Um die Testfälle besser zu organisieren, können Sie vor den Testfällen einige identifizierbare Bezeichner hinzufügen, wie zum Beispiel:
TestXxx, BenchmarkXxx, BeispielXxx Durchsuchen Führen Sie die entsprechende Funktion aus, wenn Sie das Beispiel auf dem Server ausführen. Verwenden SieOb die Funktion das erwartete Ergebnis zurückgibt
// Add 两个整数x和y func Add(x, y int) int { return x + y }
func TestAdd(t *testing.T) { cases := []struct { in1, in2, want int }{ {1, 2, 3}, {0, 0, 0}, {-1, 1, 0}, } for _, c := range cases { got := Add(c.in1, c.in2) if got != c.want { t.Errorf("Add(%d, %d) == %d, want %d", c.in1, c.in2, got, c.want) } } }
Das Testframework von Go ermöglicht es uns, Testfälle mit Kontrollstrukturen zu erstellen , wie Schleifen, Verzweigungen und Ausnahmefehlerbehandlung. Beim Testen von Code überprüfen Sie, ob sich der Code wie vorgesehen verhält, indem Sie Eingabeparameter an eine Funktion übergeben und den Ausgabewert der Funktion mit dem erwarteten Wert vergleichen.
2. Benchmark-Test
Der Golang-Benchmark-Test wird verwendet, um die Leistungsunterschiede von Codes in verschiedenen Situationen zu vergleichen. Benchmarks führen Code mehrmals aus und vergleichen die Laufzeiten. Bei einem Geschwindigkeitsunterschied können Sie ermitteln, welche Implementierung schneller ist.
Das Grundgerüst des Benchmark-Tests ist:
func BenchmarkFunctionName(b *testing.B) { // Testing code }
Unter diesen stellt BenchmarkFunctionName den Namen der Benchmark-Testmethode dar, der mit Benchmark beginnen muss, und der folgende FunctionName kann beliebig benannt werden . testing.B ist der Testkontext, der zur Steuerung des Status und der Iteration des Tests verwendet wird. Während des Benchmark-Tests können Sie damit die Anzahl der Testläufe steuern, Fehler erkennen, die beim Beenden des Tests auftreten können, und andere Probleme erkennen.
Beispielcode:
func BenchmarkAdd(b *testing.B) { for i := 0; i < b.N; i++ { Add(1, 2) } }
Wenn das Programm ausgeführt wird, lautet das Ausgabeergebnis wie folgt:
BenchmarkAdd-4 2000000000 0.29 ns/op PASS ok _/Users/test/main 1.028s
Unter ihnen
# 🎜🎜##🎜 🎜#"BenchmarkAdd" steht für den Namen des Benchmark-Tests"4" steht für die Anzahl der von der Testfunktion parallel ausgeführten Goroutinen"2000000000 " stellt die Gesamtzahl der Tests dar.B.Run führt die Anzahl der Iterationen aus, die Anzahl der Iterationen jeder Iteration des internen adaptiven Ausgleichs der Go-Sprachefunc TestPerfAdd(t *testing.T) { for i := 0; i < 100000; i++ { Add(1, 2) } }
4. Grenztests
Grenztests werden verwendet, um zu testen, wie gut der Code Randbedingungen handhabt, zum Beispiel:
func TestBubbleSort(t *testing.T) { tests := []struct { name string in []int want []int }{ {"Sorted", []int{1, 2, 3, 4, 5}, []int{1, 2, 3, 4, 5}}, {"Reverse", []int{5, 4, 3, 2, 1}, []int{1, 2, 3, 4, 5}}, {"FewElement", []int{5, 3}, []int{3, 5}}, {"Duplicate", []int{5, 3, 5, 2, 2}, []int{2, 2, 3, 5, 5}}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { BubbleSort(tt.in) if !reflect.DeepEqual(tt.in, tt.want) { t.Errorf("test case %s expects %v but actual is %v", tt.name, tt.want, tt.in) } }) } }
Grenztests können überprüfen dass das Programm verarbeitet Ob die Kantenbedingungen wie erwartet sind, zum Beispiel:
Behandeln Sie einige abnormale Eingaben (z. B. negative Zahlen, 0, maximale/kleine Werte)# 🎜🎜#Lassen Sie das Programm im Fall der schnellsten oder langsamsten Verarbeitung sein (z. B. ist die Datengröße 0 oder maximal)
Legen Sie Ober- und Untergrenzen für verschiedene Parameter der Funktion fest und testen Sie die Reaktion der Funktion#🎜 🎜#
# 🎜🎜#ZusammenfassungBeim Testen von Golang-Code sollten Sie die Vielfalt der Testfälle berücksichtigen, um nützliche und umfassende Tests für verschiedene Teile des Programms bereitstellen zu können. Das Golang-Testframework unterstützt Unit-Tests, Benchmark-Tests, Leistungstests und Grenztests, und wir können entsprechend den tatsächlichen Anforderungen auswählen. Darüber hinaus müssen wir einige Best Practices für Tests befolgen, z. B. die Benennung von Testmethoden standardisieren, Testaufgaben rational zuweisen, wiederholte Testlogik extrahieren und die schnelle Ausführung von Tests erleichtern. Ich glaube, dass Leser nach der Beherrschung dieser Testfähigkeiten in der Lage sein werden, bei der Entwicklung von Golang detailliertere Codetests durchzuführen und die Testeffizienz und Codequalität der Entwicklung zu verbessern.
Das obige ist der detaillierte Inhalt vonGolang-Test-Testmethode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!