Moderne Integration Tests mit Testcontainers

Folien Video

Was haben wir erreicht, wenn die Komponenten oder Services unserer Software in Isolation tadellos funktionieren, als Komposition jedoch plötzlich nicht mehr zusammenarbeiten möchten? Um diesem Problem entgegenzuwirken, sind Integration Tests in Ergänzung zu klassischen Unit Tests mit Mocks unverzichtbar. In der Praxis erweisen sich diese jedoch allzu gerne als Quelle sporadischer Build Failures, weil zur Ausführung benötigte Drittsysteme plötzlich von der Bildfläche verschwinden, Inhalte der Testdatenbank sich in der Zwischenzeit geändert haben oder die lokale Umgebung des Kollegen trotz (vermeintlich) gleicher Konfiguration ein gänzlich anderes Verhalten zeigt als meine.

Glücklicherweise kennen wir mit Docker bereits ein wirksames Mittel zur Abstraktion komplexer Ausführungsumgebungen, wissen aber nur allzu gut, dass der Teufel gerne im Detail steckt. An dieser Stelle kommt das Projekt „Testcontainers“ ins Spiel, welches eine leicht verständliche Java API zur Verwendung beliebiger Container in automatisierten Tests zur Verfügung stellt. Vorkonfigurierte Images gängiger Drittsysteme (z.B. Datenbanken, Message Broker, Web Server, Browser) werden praktischerweise gleich mitgeliefert, sodass bereits wenige Zeilen genügen, um eine vollständig lauffähige und vor allem portable Testumgebung aufzuziehen.

Im Rahmen dieses Events zeigen wir, dass uns Testcontainers nicht nur bei der Erstellung reproduzierbarer Integration Tests der Persistenzschicht unterstützt, sondern auch zur Automatisierung ganzer Anwendungstests (Use Cases) eingesetzt werden kann. Hierbei betrachten wir auch die Integration mit JUnit 5, Spring Boot und einem Web-Framework wie Apache Wicket oder Vaadin.