Ein Thema, über das oft gesprochen wird – vielleicht vor allem im Zusammenhang mit der Testautomatisierung –, sind Unit- und Integrationstests. Aber was bedeuten diese Tests in der Praxis und wie werden sie eingesetzt? Das erfahren Sie in diesem Blogbeitrag!
Unit-Tests – Tests der kleinsten Einheiten
Unit-Tests prüfen die kleinsten Einheiten einer Anwendung, damit wir sicher sein können, dass sie wie vorgesehen funktionieren. Diese Tests beziehen sich stark auf die eigentliche Implementierung und dienen nicht dazu, aus betrieblicher Sicht zu überprüfen, ob ein System wie vorgesehen funktioniert. Bei der testgetriebenen Entwicklung werden Unit-Tests verwendet, um zu definieren, wie eine Einheit gestaltet sein sollte, und um bestimmte Eingabeparameter und Ausgabebedingungen zu überprüfen, damit korrekte Ergebnisse erzielt werden. Anstatt zuerst den Produktionscode und erst danach die Unit-Tests zu schreiben, werden die Unit-Tests zuerst geschrieben, die natürlich zunächst weder ausgeführt werden können noch korrekte Ergebnisse anzeigen. Auf dieser Grundlage kann der Produktionscode nach und nach erweitert werden, indem genau das erstellt wird, was für den Erfolg des Unit-Tests erforderlich ist. Unit-Tests sollten als wichtige Ergänzung während der Entwicklung betrachtet werden und nicht als eine Testart, die allein ausreicht, um die ordnungsgemäße Qualität zu überprüfen.
Integrationstests – Tests, die überprüfen, ob alle Einheiten zusammenarbeiten
Integrationstests prüfen, ob alle Einheiten einer Anwendung zusammenarbeiten. Bei diesen Tests kann die Anwendung von außen aufgerufen werden, so wie sie vom Benutzer oder anderen Systemen genutzt werden soll. Das bedeutet, dass sie nicht in derselben Weise mit der Lösung verbunden sind wie Komponententests und daher nicht in gleichem Maße davon betroffen sein müssen – die Lösung muss beispielsweise nicht umgestaltet werden. Integrationstests eignen sich hervorragend für Regressionstests und können so konzipiert werden, dass Fehler so früh wie möglich erkannt werden. Eine Voraussetzung hierfür ist die Testbarkeit der Anwendung für diese Tests. Wie erfolgt die Authentifizierung bei einer Anwendung, die einem Integrationstest unterzogen werden soll, und wie sieht es mit der Anwendungskonfiguration aus, wenn der Dienst lokal auf einem Arbeitscomputer getestet werden soll?
Lassen Sie uns eine einfache Analogie ziehen:
Ein internes Bauteil einer Anwendung lässt sich mit einem Teil unter der Motorhaube Ihres Autos vergleichen, beispielsweise dem Keilriemen. Um die Qualität des Keilriemens sicherzustellen, wird dieser separat getestet, wobei Aspekte wie Festigkeit, Lebensdauer und Reibung des Materials geprüft werden. Für den Fahrer ist es jedoch nicht wichtig, dass sich ein Keilriemen im Auto befindet, sondern vielmehr, dass das Auto robust ist und daher eine funktionierende Motorkühlung benötigt. Würde der Autohersteller eine völlig neue Methode zur Motorkühlung entwickeln, wären die internen Tests zur Prüfung von Keilriemen nutzlos, doch aus Sicht des Fahrers würden sich die Tests des Autos nicht ändern. Man könnte dieselben fahrerorientierten Tests nutzen, um zu beurteilen, dass das Auto mit der neuen Kühlung genauso gut oder sogar besser fährt.
Gleiche Technik trotz unterschiedlicher Testzwecke
Auch wenn der Zweck von Unit- und Integrationstests unterschiedlich ist, lassen sie sich oft mit denselben Techniken erstellen. Unit-Tests müssen naturgemäß in derselben Programmiersprache geschrieben werden wie der zu testende Code, um möglichst effektiv zu sein. Dies hilft uns, durch Aktualisierungen verursachte Kompilierungsfehler zu finden und so schnell wie möglich Feedback zu geben. Diese Tests haben selten oder kaum Abhängigkeiten zur Infrastruktur und sind daher frei von Herausforderungen im Zusammenhang mit Testumgebungen, Testdaten und Abhängigkeiten zu anderen Systemen. Dies macht Unit-Tests zur zuverlässigsten Testart.
Durch den Einsatz der richtigen Tools lassen sich in vielen Fällen dieselben Vorteile auch für Integrationstests nutzen. Dazu sind bestimmte Voraussetzungen erforderlich, um die Anwendung von außen aufzurufen und durchzulaufen, wobei die richtige Client-Unterstützung und Mocking-Technologie zum Einsatz kommen müssen. Häufig ist es zudem notwendig, die gesamte Anwendung wie vorgesehen auszuführen, um auf den gesamten Tech-Stack zugreifen zu können.
Zusammenfassung
Unit-Tests und Integrationstests sind zwei wichtige Voraussetzungen für die Entwicklung von Software in der richtigen Qualität. Zusammen bilden sie die frühesten automatisierten Tests, die eine unabdingbare Voraussetzung dafür sind, neue Software in kurzer Zeit und mit hoher Frequenz bereitstellen zu können. Durch die Wahl des richtigen Tools gewinnen Sie ein hohes Maß an Vertrauen in diese Tests. Sie bieten Unterstützung für neue Entwicklungen und vermitteln ein fundiertes Qualitätsgefühl bei Änderungen.