What is unit testing and integration testing?

Oft ist von Unit- und Integrationstests die Rede, vor allem im Zusammenhang mit der Testautomatisierung. Aber was bedeuten diese Tests in der Praxis und wie werden sie eingesetzt? In diesem Blogbeitrag erfahren Sie mehr!

 

Unit tests – tests the smallest units

Unit-Tests testen die kleinsten Komponenten einer Anwendung, damit wir wissen, ob sie wie vorgesehen funktionieren. Diese Tests beziehen sich stark auf die eigentliche Implementierung und nicht darauf, ob ein System aus betrieblicher Sicht wie beabsichtigt funktioniert. In der testgetriebenen Entwicklung werden Unit-Tests verwendet, um zu definieren, wie eine Komponente formuliert werden sollte, und um zu überprüfen, ob gegebene Eingabeparameter und Ausgabebedingungen korrekte Ergebnisse liefern. Anstatt zuerst den Produktionscode und danach die Unit-Tests zu schreiben, werden zuerst die Unit-Tests geschrieben, die natürlich weder funktionieren noch korrekte Ergebnisse zeigen. Basierend auf dieser Situation kann der Produktionscode wachsen, indem er das erzeugt, was für den Erfolg der Unit-Tests erforderlich ist. Unit-Tests sollten als eine wichtige Ergänzung während der Entwicklung betrachtet werden und nicht als eine Art von Test, der ausreicht, um die Qualität zu überprüfen.

 

Integration tests – tests that all units work together

Bei Integrationstests wird geprüft, ob alle Komponenten einer Anwendung zusammenarbeiten. Bei diesen Tests kann die Anwendung von außen so aufgerufen werden, wie sie vom Benutzer oder anderen Systemen genutzt werden soll. Das bedeutet, dass sie nicht auf die gleiche Weise mit der Lösung verbunden sind (wie Unit-Tests) und daher nicht in gleichem Maße beeinflusst werden müssen und die Lösung z. B. refaktorisiert werden muss. Integrationstests eignen sich hervorragend für Regressionstests und können erstellt werden, um Fehler so früh wie möglich zu finden. Die Testbarkeit der Anwendung für diese Tests hervorzuheben ist eine Voraussetzung. Wie authentifiziert man sich gegenüber einer Anwendung, die einem Integrationstest unterzogen werden soll, und wie sieht es mit der Anwendungskonfiguration aus, wenn der Dienst lokal auf einem Arbeitsrechner getestet werden soll?

Let’s make a simple analogy:

An internal device in an application can be compared to a part under the hood of your car, such as the fan belt. To ensure the quality of the fan belt, it will be tested separately, where things like strength, life and friction in the material are checked. However, it is not important for the driver that there is a fan belt in the car, but rather that the car is robust, and thus needs a functioning cooling of the engine. If the car manufacturer were to develop an entirely new method of cooling the engine, the internal tests to test fan belts would be useless, but the tests of the car would be unchanged from a driver’s perspective. One could use the same driver-based tests to judge that the car drives as well or better with the updated cooling.

 

Gleiche Technik trotz unterschiedlicher Zwecke der Tests

Auch wenn der Zweck von Unit- und Integrationstests unterschiedlich ist, können sie oft mit denselben Techniken erstellt werden. Es liegt in der Natur der Sache, dass Unit-Tests in derselben Programmiersprache geschrieben werden müssen wie der zu testende Code, um möglichst effektiv zu sein. Dies hilft uns, Kompilierungsfehler aufgrund von Aktualisierungen zu finden und so schnell wie möglich Feedback zu geben. Diese Tests sind nur selten oder in geringem Maße von der Infrastruktur abhängig und werden dadurch von den Herausforderungen im Zusammenhang mit Testumgebungen, Testdaten und Abhängigkeiten von anderen Systemen befreit. Das macht Unit-Tests zur zuverlässigsten Testart.

Durch den Einsatz der richtigen Tools können Sie in vielen Fällen die gleichen guten Vorteile für Integrationstests erzielen. Sie benötigen Voraussetzungen, um die Anwendung von außen und von innen aufzurufen, wozu die richtige Client-Unterstützung und Mocking-Technologie verwendet werden müssen. Es ist auch üblich, dass Sie die gesamte Anwendung wie vorgesehen ausführen müssen, um auf dem gesamten Tech-Stack zuzugreifen.

 

Zusammenfassung 

Unit-Tests und Integrationstests sind zwei wichtige Voraussetzungen für die Entwicklung von Software mit der richtigen Qualität. Zusammen bilden sie die ersten automatischen Tests, die unabdingbare Voraussetzung dafür sind, dass neue Software in hoher Frequenz und in kurzer Zeit geliefert werden kann. Mit der Wahl des richtigen Werkzeugs gewinnen Sie ein hohes Maß an Vertrauen in diese Tests. Sie unterstützen die Neuentwicklung und geben ein begründetes Qualitätsempfinden für Änderungen.

Über den Autor

Stefan Vahlgren

Stefan verfügt über fundierte Kenntnisse in den Bereichen Performance und Testautomatisierung. Stefan betreut ein selbst entwickeltes Open-Source Tool (Loadcoder) für Performance Testing in Java. Er lernt in verschiedenen Foren neue Techniken kennen. Seine Leidenschaft ist die Einfachheit und kontinuierliche Verbesserung. Außerdem, unterrichtet Stefan darüber, wie Organisationen effizienter werden können, indem sie frühzeitig mit Performance arbeiten. 

Möchten Sie mehr über Testing erfahren?