go / intermediate
Snippet
Schreiben wartbarer tabellengesteuerter Unit-Tests
Tabellengesteuertes Testen (Table-driven testing) ist ein idiomatisches Muster in Go. Indem eine Liste von Testfällen in einem Slice von Strukturen definiert wird, können neue Testeingaben und erwartete Ausgaben einfach hinzugefügt werden, ohne die Assertions-Logik zu duplizieren, was zu saubereren und wartbareren Tests führt.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package mainimport ("testing")func Add(a, b int) int {return a + b}func TestAdd(t *testing.T) {tests := []struct {name stringa, b intexpected int}{{"positive numbers", 2, 3, 5},{"negative numbers", -1, -1, -2},{"mixed numbers", -1, 5, 4},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {result := Add(tt.a, tt.b)if result != tt.expected {t.Errorf("Add(%d, %d) = %d; want %d", tt.a, tt.b, result, tt.expected)}})}}
Erklärung
1
tests := []struct { ... }
Deklariert ein Slice aus anonymen Strukturen, das die Testmatrix repräsentiert und Testnamen, Eingaben sowie erwartete Ergebnisse enthält.
2
for _, tt := range tests
Iteriert über jeden Testfall in der Tabelle und bindet den aktuellen Fall an Variablen im lokalen Gültigkeitsbereich.
3
t.Run(tt.name, func(t *testing.T) { ... })
Erstellt einen Untertest mit eigenem Berichterstellungsbereich, was das Isolieren und Ausführen bestimmter Testfälle über die CLI erleichtert.
4
t.Errorf(...)
Protokolliert einen Assertionsfehler, wenn die Ausgabe nicht dem erwarteten Wert entspricht, lässt jedoch die Ausführung nachfolgender Tests in der Tabelle zu.