Unit Tests

Foto von Sohrab Salimi
Sohrab Salimi
3 Min. Lesezeit

Unit Tests (auch Modultests oder Komponententests genannt) werden in der Software-Entwicklung eingesetzt. Ihr Zweck ist es zu überprüfen, ob einzelne Software-Komponenten so arbeiten und funktionieren wie beabsichtigt.

Warum sind Unit Tests sinnvoll?

Die folgenden Aufgaben werden im Rahmen von Qualitätssicherung durch Unit Tests erledigt:

  • Unit Testing deckt Fehler und versehentliche Änderungen der Funktionalität innerhalb einer Software auf.
  • Bei Feature-Erweiterungen zeigen Unittests unbeabsichtigte Auswirkungen auf das bestehende System aus.
  • Dank Unittests fallen Fehler schon während der Entwicklung auf, so dass Fehlerkosten vermieden werden können.
  • Durch das frühzeitige Finden und Beheben von Fehlern wird die Entwicklung der Software beschleunigt.
  • Unittests können (besonders, wenn sie automatisiert ablaufen) wesentlich schneller durchgeführt werden als manuelle Tests. Dadurch werden Entwicklungsstufen schneller durchlaufen und Release-Zyklen verkürzen sich.
  • Unit Test helfen bei der Dokumentation des Systems, da sie die beabsichtigten Funktionen und Reaktionen des getesteten Moduls aufzeigen. Werden die Objekte sinnvoll benannt (Clean Code), sind zusätzliche Maßnahmen zur Dokumentation unnötig.

Automatisiertes Unit Testing

Bei der Software-Entwicklung nach agilen Methoden werden im Rahmen von testgetriebener Entwicklung und Refactoring häufig Unit Tests durchgeführt, um schnell Fehler zu finden und die Qualität zu verbessern. Damit das Testen keine zusätzliche Arbeit bedeutet und kostengünstig durchgeführt werden kann, laufen Unit Tests automatisiert ab dank sogenannter Testautomatisierungen.

Ursprünglich wurde diese Art der Automatisierung vorgeschlagen von Kent Beck als ein kleines Framework, das die Erstellung automatisierter Unittests unterstützen sollte. Daraus entstand das SUnit-Framework für unterschiedliche Programmiersprachen, woraus sich später das JUnit-Framework für JavaScript entwickelte.

Test-Frameworks rufen die einzelnen Testklassen auf und führen deren Komponententests aus. Meist werden die Testergebnisse von Test-Frameworks als grafische Zusammenfassung ausgegeben.

Worauf kommt es beim Entwickeln von Unittests an?

Wenn du und dein Team eure eigenen Unittests schreiben wollen, achtet dabei auf die folgenden Punkte:

  • Die Tests sollten unabhängig voneinander funktionieren, damit die Testergebnisse sich gegenseitig nicht beeinflussen. Ist dies gegeben, spielt auch die Reihenfolge der Tests keine Rolle.
  • Unittests sollten kurz und leicht verständlich konzipiert sein und immer nur eine Eigenschaft testen.
  • Die Tests sollten vollständig automatisiert sein, um so oft wie möglich durchgeführt werden zu können.
  • Unittests sollten nur den wirklich relevanten Code testen (also zum Beispiel keine Getter oder Setter) und sind um eine Testfixture gruppiert (nicht um eine Klasse).
  • Unit Tests sollten - vor allem im Rahmen von testgetriebener Entwicklung - vor dem zu testenden Code geschrieben werden. Dieser zusätzliche Implementierungsaufwand sollte bei der Planung neuer Features und Funktionen immer mitgedacht werden.

Wie funktionieren Unittests?

Die meisten Tests folgen einem ähnlichen Grundaufbau:

  • Ein Ausgangszustand wird initialisiert.
  • Die zu testende Operation wird ausgeführt.
  • Das Ergebnis wird mit einem aus der Spezifikation abgeleiteten Sollwert verglichen.

Von wem werden Unittests geschrieben?

In manchen Unternehmen sind die Entwicklung von Software und die Qualitätssicherung noch getrennt, so dass die Unit Tests nicht von den Entwicklern selbst geschrieben werden.

Arbeitet dein Unternehmen nach agilen Methoden, sollte die gesamte Verantwortung für das Entwickeln und Funktionieren der Software im selben Team bleiben, sprich: Das Team, das den Code für die Software schreibt, entwickelt auch das Unit-Testing dazu.

Fazit zum Thema Unit-Testing

Auch wenn durch Unit Testing lediglich die erwarteten Fehler in Anwendungen gefunden werden können (denn nur für diese werden die Tests geschrieben), hat es sich als wichtige Maßnahme zur Qualitätssicherung von Software entwickelt. Besonders das automatisierte Testen von Units beschleunigt den Prozess des frühzeitigen Findens und Behebens von Fehlern und unterstützt besonders in der agilen Softwareentwicklung iteratives Arbeiten, Prototyping und die kontinuierliche Verbesserung von Produkten.

Mehr zu diesem Thema

A/B Testing

Finder hier die Grundlagen für A/B Testing auf deiner Website. Wir erklären die dir Grundlagen und den Einstieg in agiles Testen

Agiles Software Management

Entdecken Sie, wie agile Methoden und Praktiken im Softwaremanagement angewendet werden, um effektive und effiziente Softwareentwicklung zu fördern.

DevOps

Dieser Artikel erklärt die Vorteile und Herausforderungen bei der Einführung von DevOps und was es bedeutet DevOps im Unternehmen zu nutzen.