it-praxisportal/courses/powershell/14_pester_automatisierte_unit_tests
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.ps1 Integration von 2 vollständigen DevOps- & Scripting-Kursen: (1) Linux Bash & Cloud DevOps (16 Module) und (2) Modern PowerShell 7+ Core (16 Module) mit Multithreading, REST-Pipelines, Runner-Adaptern und 8 neuen Zertifikaten 2026-08-30 12:55:08 +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.ps1 Integration von 2 vollständigen DevOps- & Scripting-Kursen: (1) Linux Bash & Cloud DevOps (16 Module) und (2) Modern PowerShell 7+ Core (16 Module) mit Multithreading, REST-Pipelines, Runner-Adaptern und 8 neuen Zertifikaten 2026-08-30 12:55:08 +02:00
README.md Integration von 2 vollständigen DevOps- & Scripting-Kursen: (1) Linux Bash & Cloud DevOps (16 Module) und (2) Modern PowerShell 7+ Core (16 Module) mit Multithreading, REST-Pipelines, Runner-Adaptern und 8 neuen Zertifikaten 2026-08-30 12:55:08 +02:00
test_aufgabe.ps1 Integration von 2 vollständigen DevOps- & Scripting-Kursen: (1) Linux Bash & Cloud DevOps (16 Module) und (2) Modern PowerShell 7+ Core (16 Module) mit Multithreading, REST-Pipelines, Runner-Adaptern und 8 neuen Zertifikaten 2026-08-30 12:55:08 +02:00

PS 14: Pester v5 Automatisiertes Testing & Mocking 🧪

Willkommen zu Modul 14 des PowerShell 7+ DevOps-Kurses!

Pester ist das De-facto-Standard-Framework für Behavior-Driven Development (BDD) und automatisierte Unittests in PowerShell. Mit Version 5 wurde Pester von Grund auf modernisiert und trennt die Test-Erkennungsphase (Discovery Phase) strikt von der eigentlichen Ausführung (Run Phase).


💡 1. Das Wichtigste in Kürze

A. Pester v5 Syntax & Struktur

Describe 'Server Health Monitoring Service' {
    BeforeAll {
        # Einmaliges Setup vor allen Tests
        $testHost = 'srv-app01'
    }

    Context 'Wenn alle Dienste online sind' {
        It 'Sollte den Server als Operational einstufen' {
            # Arrange: Mocks definieren
            Mock Get-Service { [PSCustomObject]@{ Status = 'Running' } }
            Mock Test-Connection { $true }

            # Act: Funktion ausführen
            $result = Get-ServerHealthStatus -ServerName $testHost

            # Assert: Überprüfungen
            $result.IsHealthy | Should -BeTrue
            $result.Code | Should -Be 200
        }
    }

    Context 'Fehlerbehandlung' {
        It 'Sollte werfen, wenn Dienst unrettbar ist' {
            Mock Get-Service { [PSCustomObject]@{ Status = 'Stopped' } }
            Mock Restart-Service {}

            { Restart-FailedService -ServiceName 'CriticalDB' -MaxRetries 1 } | Should -Throw
        }
    }
}

B. Fluent Assertions mit Should

Pester bietet eine intuitive, lesbare Syntax für Zusicherungen:

  • $val | Should -Be $expected
  • $val | Should -BeTrue / $val | Should -BeFalse
  • $list | Should -HaveCount 3
  • $list | Should -Contain "Entry"
  • { Invoke-DangerousCmdlet } | Should -Throw

C. Mocking (Isolierte Unittests)

Ein Mock ersetzt ein echtes PowerShell-Cmdlet (wie Restart-Service oder Invoke-RestMethod) während des Tests durch eine kontrollierte Attrappe. Dadurch zerstören Tests keine echten Produktivsysteme:

# Echten Reboot simulieren:
Mock Restart-Computer {}

# Prüfen, ob der Mock genau 1x aufgerufen wurde:
Should -Invoke Restart-Computer -Times 1 -Exactly

🎼 Die didaktische Analogie: "Der Flugsimulator"

  • Das Flugzeug (Dein PowerShell-Code):
    Die Steuersoftware für echte Passagiermaschinen.
  • Der Flugsimulator (Pester v5 Framework):
    Eine kontrollierte Testumgebung, in der Turbulenzen, Blitzeinschläge und Triebwerksausfälle simuliert werden.
  • Die Mocks (Mock Get-Service):
    Die künstlichen Sensoren im Simulator. Sie melden "Triebwerk brennt", ohne dass echtes Kerosin brennen muss – und wir prüfen, ob die Notfall-Funktion blitzschnell und fehlerfrei reagiert!

🎯 Aufgaben & Teilziele in aufgabe.ps1

  1. TODO 1: Get-ServerHealthStatus
    Implementiere die Zustandsprüfung, die auf Mock-Aufrufe von Get-Service und Test-Connection reagiert.
  2. TODO 2: Restart-FailedService
    Baue eine Service-Restart-Schleife mit Retries und Exception-Handling bei anhaltendem Ausfall.
  3. TODO 3: Test-PesterResultAnalyzer
    Berechne Erfolgsquote (PassRate) und erstelle CI/CD Quality-Gate-Entscheidungen aus Testresultaten.
  4. TODO 4: Invoke-MockableApiAudit
    Führe einen REST-API-Audit durch und werte Status und Payload-Gültigkeit aus.

🧪 Tests ausführen

Invoke-Pester ./test_aufgabe.ps1