Unit Tests

Mit Unit-Test validieren Entwickler kleine Module der Anwendung. Die Unit steht für die kleinste zu prüfende Einheit, was üblicherweise eine einzelne Methode, Klasse oder Funktionen darstellt. Dabei wird die Einheit stets isoliert betrachtet, das Zusammenspiel mit anderen Komponenten spielt keine Rolle.

Auch wenn Unit-Tests nur in großer Anzahl eine hohe Testabdeckung bieten, sind sie essenziell für die Qualitätssicherung, da sie lokale Fehler schnell identifizieren. Auf der Testpyramide nach Mike Kohn nehmen sie die unterste Ebene ein.  

Da man vor allem in agilen Projekten lange Testausführungen vermeiden möchte und schnell Feedback benötigt, werden Unit-Tests typischerweise automatisiert. Dies gibt dem Entwicklungsteam zügig eine Rückmeldung zu potenziellen Nebeneffekten bei Veränderungen am Testobjekt. In der Java-Welt wird hierfür vor allem JUnit für die Testautomatisierung genutzt, in Python ist es pytest und in Javascript Jest bzw. Mocha. 

Der Unit-Test soll nachweisen, dass sich ein isoliertes, kleines Objekt korrekt verhält, unabhängig von anderen Einheiten, Komponenten oder Subsystemen. Dies ist jedoch in echten Projekten nicht immer einfach. Häufig bestehen Abhängigkeiten zwischen Softwarekomponenten, wodurch zunächst geeignete Testrahmen geschaffen werden müssen. In der objektorientierten Entwicklung werden dafür Mocks verwendet, die den eigentlichen Funktionsumfang durch Platzhalter reduzieren.

Unit-Tests werden typischerweise vom Entwicklerteam selbst geschrieben und sind schon seit den frühen Jahren der Softwareentwicklung ein integraler Bestandteil der Qualitätssicherung. Jerry Weinberg, ein bekannter US-amerikanischer Autor sagte einmal „Wir haben 1956 Unit-Tests durchgeführt. Soweit ich weiß, wurde es schon immer gemacht, solange es Computer gab.“

Vier gute Gründe für Unit-Tests

  1. Unit-Tests helfen, Bugs früh im Entwicklungsprozess zu identifizieren.
  2. Nach Codeänderungen können Unit-Tests schnell unerwartete Seiteneffekte aufdecken.
  3. Unit-Tests verursachen im Vergleich zu E2E-Tests weniger Aufwand und können schnell in CI/CD-Pipelines eingebunden werden.
  4. Unit-Tests fördern eine sorgfältige Dokumentation und Codequalität, da den Ein- und Ausgabewerten von Methoden, auch von Testern, grundsätzlich mehr Bedeutung beigemessen wird.

Unit Tests und der TDD-Ansatz

In agilen Softwareprojekten werden Unit-Tests immer häufiger nach dem Test Driven Development (TDD) Ansatz entwickelt. Bei dieser Methodik wird das Schreiben des Programmcodes durch den Test beeinflusst, genauer gesagt wird der Testfall vor der eigentlichen Codierung geschrieben. 

Der Unit-Test wird formuliert und schlägt dann so lange fehl, bis der Test schließlich durch das Schreiben der Methode/Klasse erfolgreich bestanden wird. Dabei konzentriert sich der Entwickler darauf, nur so wenig und verständlichen Code zu schreiben, wie es für die Erfüllung des Tests notwendig ist. Das Prinzip kann nicht nur zu höherer Codequalität durch eine saubere Architektur führen, sondern hilft dem Programmierer, mit fachlicher Brille auf den Code zu schauen. 

Fazit

Unit-Tests sind ein wichtiges Werkzeug für jeden Programmierer. Sie validieren die kleinsten, isolierten Einheiten der Softwareanwendung und unterstützen dabei, Bugs frühzeitig zu identifizieren und Nebeneffekte bei Änderung am Code aufzudecken. Durch Testautomatisierung können sie insbesondere im agilen Umfeld aufgrund von schnellem Feedback großen Mehrwert stiften. 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.