it-praxisportal/courses/go/15_unit_testing_und_benchmarks
Alex Mueller 2571cb8847 feat(ux): responsive kurs-sidebar und kapitel-drawer für alle 13 kurse & web-ide
- Dynamic Sidebar mit window.COURSES_MANIFEST für 13 Kurse (216 Kapitel)
- Kurswechsler Dropdown mit Direktnavigation
- Fortschrittsanzeige mit Solved-Checkmarks (✓) aus localStorage
- Responsive Off-Canvas Drawer mit Floating Action Button (☰ Kapitel) & Backdrop auf Mobile/Tablets
- Web-IDE Topbar Drawer-Button (☰ Kapitel) für unterbrechungsfreien Vollbild-Editor
- Saubere Bereinigung redundanter statischer Legacy-Sidebars
2026-09-12 13:49:46 +02:00
..
aufgabe.go Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
index.html feat(ux): responsive kurs-sidebar und kapitel-drawer für alle 13 kurse & web-ide 2026-09-12 13:49:46 +02:00
musterloesung.go Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
README.md Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00
test_aufgabe.go Vollständige Umsetzung von Phase A bis C: (1) SQL & Data Analytics Master (16 Module), (2) HTML5 & Modern CSS3 (16 Module) und (3) Go Cloud Microservices (16 Module). Plattform umfasst nun 131 Module über 7 Sprachen 2026-08-30 13:10:38 +02:00

Go 15: Automatisiertes Testing, Table-Driven Tests & Benchmarks 🧪

Willkommen zu Modul 15 des Go Cloud & Concurrency Lehrpfads!

In diesem Modul professionalisierst du deine Testpraxis mit Gos Standard-Tooling. Du schreibst wartbare Table-Driven Tests, führst Subtests aus und analysierst Speicherallokationen mit Gos Benchmark-Runner.


💡 1. Das Wichtigste in Kürze

Table-Driven Test Pattern

func TestSlugify(t *testing.T) {
    tests := []struct {
        name    string
        input   string
        want    string
        wantErr bool
    }{
        {"Normaler Text", "Hello World", "hello-world", false},
        {"Sonderzeichen", "Go 1.22 & Cloud!", "go-122-cloud", false},
        {"Leerer String", "", "", true},
    }

    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            got, err := Slugify(tt.input)
            if (err != nil) != tt.wantErr {
                t.Fatalf("Slugify() error = %v, wantErr %v", err, tt.wantErr)
            }
            if got != tt.want {
                t.Errorf("Slugify() = %v, want %v", got, tt.want)
            }
        })
    }
}

Benchmarks & Allokationen

func BenchmarkFastStringJoin(b *testing.B) {
    parts := []string{"apple", "banana", "cherry", "date"}
    b.ReportAllocs()
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        _ = FastStringJoin(parts, ", ")
    }
}

🎯 Aufgaben in aufgabe.go

  1. TODO 1 (Slugify):
    • Wandelt einen String in einen URL-Slug um:
      • Kleinschreibung (strings.ToLower)
      • Ersetzt Leerzeichen, Punkte und Sonderzeichen durch Bindestriche (-)
      • Entfernt doppelte Bindestriche (-- -> -)
      • Trimmt Bindestriche am Anfang und Ende
    • Gibt einen Fehler zurück, falls der Eingabestring leer ist (errors.New("input string cannot be empty")).
  2. TODO 2 (ValidateEmail):
    • Prüft Email-Format:
      • Enthält genau ein @
      • Text vor @ (Username) darf nicht leer sein
      • Domain nach @ darf nicht leer sein und muss mindestens einen Punkt . enthalten (nicht als erstes/letztes Zeichen).
  3. TODO 3 (FastStringJoin):
    • Verbindet einen String-Slice mit einem Trennzeichen unter Verwendung von strings.Builder.
  4. TODO 4 (RunTableDrivenTests):
    • Führt eine strukturierte Testtabelle über Slugify und ValidateEmail aus.

🧪 Tests & Benchmarks ausführen

go test -v -bench=. -benchmem ./...