Katalog
concept#Software-Engineering#Qualitätssicherung#DevOps#Zuverlässigkeit

Unit Testing

Isolierte, automatisierte Tests einzelner Codeeinheiten zur Sicherstellung von Korrektheit und Vermeidung von Regressionen.

Unit-Tests prüfen einzelne Softwareeinheiten isoliert auf Korrektheit und entdecken Regressionen früh im Entwicklungsprozess.
Etabliert
Niedrig

Klassifikation

  • Niedrig
  • Technisch
  • Design
  • Fortgeschritten

Technischer Kontext

CI/CD-Systeme (z. B. GitLab CI, GitHub Actions)Test-Frameworks (z. B. JUnit, pytest)Mocking-Bibliotheken und Test-Doubles

Prinzipien & Ziele

Isolierung: Tests sollten unabhängig und deterministisch sein.Schnelligkeit: Unit-Tests müssen schnell ausführbar sein.Automatisierung: Tests sind Teil der CI-Pipeline.
Umsetzung
Team, Domäne

Use Cases & Szenarien

Kompromisse

  • Übermäßiger Fokus auf Coverage statt auf sinnvolle Tests.
  • Flaky Tests verringern Vertrauen in die Test-Suite.
  • Unzureichende Tests erlauben Regressionen in Integrationspfaden.
  • Schreibe kleine, fokussierte Tests, die ein Verhalten verifizieren.
  • Verwende Mocks sparsam und nur für echte externe Abhängigkeiten.
  • Automatisiere Testausführung in der CI und halte Laufzeiten kurz.

I/O & Ressourcen

  • Quellcode der zu testenden Unit
  • Testframework und Assertion-Bibliotheken
  • Definition der erwarteten Schnittstellen und Verhalten
  • Automatisierte Testfälle mit Assertions
  • Reports über Testläufe und Misserfolge
  • Regressionserkennung bei Codeänderungen

Beschreibung

Unit-Tests prüfen einzelne Softwareeinheiten isoliert auf Korrektheit und entdecken Regressionen früh im Entwicklungsprozess. Automatisierte, schnelle Tests laufen häufig lokal und in CI-Pipelines. Gute Unit-Tests fördern modulare Architektur, erleichtern Refactoring und liefern Entwickler:innen rasches Feedback zur Qualität des Codes. Sie sind die Grundlage für zuverlässige, automatisierte Teststrategien.

  • Ermöglicht frühes Erkennen von Fehlern während der Entwicklung.
  • Unterstützt Refactoring durch automatisierte Regressionsprüfung.
  • Erhöht Code-Qualität und Design durch gezielte, modulare Tests.

  • Deckt keine Integrations- oder Systemfehler ab.
  • Hoher Wartungsaufwand bei häufigen Interface-Änderungen.
  • Falsch konfigurierte Mocks können falsche Sicherheit vermitteln.

  • Testlaufzeit

    Mittlere Ausführungsdauer der Unit-Test-Suite pro Commit.

  • Testabdeckung (Coverage)

    Prozentsatz des Codes, der von Unit-Tests abgedeckt ist (Line/Branch).

  • Fehlerrate pro Commit

    Anteil der Commits, die Unit-Test-Fehler im CI auslösen.

JUnit-Suite für Service-Klasse

Konzentration auf einzelne Service-Methoden mit Mocking der Abhängigkeiten.

pytest-Module für Python-Bibliothek

Parametrisierte Tests prüfen unterschiedliche Inputs und Randfälle automatisiert.

CI-Testlauf gegen Pull Request

Automatischer Testlauf verhindert das Einbringen regressiver Änderungen.

1

Identifizieren einer klaren Unit und ihrer Schnittstellen.

2

Einrichten eines Testframeworks und Basis-Testfälle schreiben.

3

Integration der Tests in CI und kontinuierliche Ausführung sicherstellen.

4

Regelmäßige Wartung: Refactoren von Tests bei API-Änderungen.

⚠️ Technische Schulden & Engpässe

  • Große, monolithische Testsuiten mit langen Laufzeiten.
  • Unzureichend modulare Codebasis erschwert Unit-Test-Möglichkeiten.
  • Fehlende Testdaten-Isolierung führt zu nicht-deterministischen Ergebnissen.
TestwartungFlaky-TestsUmgebungsparität
  • Unit-Tests, die eigentlich Integrationstests sind und externe Systeme ansprechen.
  • Ausufernde Coverage-Metriken ohne Fokus auf kritische Pfade.
  • Mocking der zu testenden Logik statt der externen Abhängigkeiten.
  • Fehlende Wartung führt zu veralteten oder irreführenden Tests.
  • Flaky-Tests ignorieren statt beheben vermindert Vertrauen.
  • Testabhängigkeiten zwischen Units führen zu schwer zu debuggen Fehlern.
Programmierkenntnisse und Design von modularem CodeVertrautheit mit Testframeworks und MockingKenntnis von CI-Integration und Testautomatisierung
Modularität der Komponenten für isoliertes TestenSchnelle Feedbackzyklen durch kurze TestlaufzeitenStabile Schnittstellen zur Reduzierung von Testwartung
  • Begrenzter Zugang zu realen Abhängigkeiten erfordert Mocks/Stubs.
  • Legacy-Code kann schwer isolierbar sein.
  • Testdatenmanagement muss deterministisch gestaltet sein.