go / expert
Snippet
Hermetische Subtest-Isolierung mit paralleler Ausführungssteuerung und Cleanup-Hooks
Paralleles Testen mit Subtests erfordert die sorgfältige Handhabung von Closure-Variablen, Ressourcenbereinigung über t.Cleanup und Aufrufer-Stacktraces mittels t.Helper(). t.Cleanup garantiert das Aufräumen selbst bei Fehlern oder Panics.
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
31
32
33
34
35
36
37
38
39
package mainimport ("testing")type TestEnv struct {ID string}func SetupEnv(t *testing.T) *TestEnv {t.Helper()env := &TestEnv{ID: t.Name()}t.Cleanup(func() {// Teardown resource after subtest completes})return env}func TestConcurrentWorkflows(t *testing.T) {cases := []struct {name stringinput int}{{"case_alpha", 10},{"case_beta", 20},}for _, tc := range cases {tc := tct.Run(tc.name, func(t *testing.T) {t.Parallel()env := SetupEnv(t)if env.ID == "" {t.Fatalf("expected valid test env ID")}})}}
Erklärung
1
t.Helper()
Markiert die Funktion als Test-Helper, sodass Protokollmeldungen die Zeile des Aufrufers melden.
2
t.Cleanup(func() { ... })
Registriert einen Teardown-Callback, der nach Beendigung des Tests automatisch ausgeführt wird.
3
t.Parallel()
Signalisiert, dass dieser Subtest parallel zu anderen parallelen Tests ausgeführt werden kann.