go / expert
Snippet
Stack-Frame-Anpassung in benutzerdefinierten Test-Helfern mittels t.Helper
Der Aufruf von t.Helper() in generischen Test-Assertions-Routinen markiert die ausführende Funktion als Helfer. Wenn Fehlermeldungen oder Stacktraces protokolliert werden, überspringt Go automatisch den Call-Frame des Helfers, um die genaue Datei und Zeilennummer des Aufrufers zu melden.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package mainimport ("testing")func assertEqual[T comparable](t testing.TB, got, want T) {t.Helper()if got != want {t.Fatalf("assertion failed: got %v, want %v", got, want)}}func TestCustomHelper(t *testing.T) {got := 42want := 42assertEqual(t, got, want)}
Erklärung
1
func assertEqual[T comparable](t testing.TB, got, want T) {
Defines eine generische Test-Helferfunktion, die das testing.TB-Interface akzeptiert, um sowohl *testing.T als auch *testing.B zu unterstützen.
2
t.Helper()
Registriert die umschließende Funktion als Test-Helfer und entfernt ihren Frame aus der Callstack-Fehlerberichterstattung.
3
t.Fatalf("assertion failed: got %v, want %v", got, want)
Protokolliert den fatalen Fehler mit Zuordnung zur Aufruferzeile anstatt zu assertEqual.