Glossar · Testgrundlagen
Integrationstest
Englisch: Integration test
Auch genannt: Integrationstests, Integrationstesten, Integration Testing
Definition
Ein Test, der prüft, ob zwei oder mehr Komponenten, etwa ein Service und seine Datenbank oder zwei APIs, über ihre echten Schnittstellen korrekt zusammenarbeiten.
Ein Integrationstest verifiziert die Verbindungen zwischen Komponenten statt der Logik innerhalb einer einzelnen. Er verwendet an mindestens einer Grenze echte Implementierungen: ein Repository gegen eine echte Datenbank, einen Service, der die API eines anderen Service aufruft, einen Message Producer und seinen Consumer. Genau diese Tests finden falsches SQL, fehlerhafte Serialisierung, fehlende Konfiguration und nicht passende Contracts – alles Dinge, die Unit-Tests mit Mocks übersehen würden.
Beispiel
Ein OrderRepository ist mit Mocks unit-getestet, und diese Tests bestehen. Der Integrationstest führt es gegen eine echte PostgreSQL-Instanz aus, die in einem Container gestartet wird:
- PostgreSQL mit Testcontainers starten und die Schema-Migrationen anwenden.
- Über das Repository eine Bestellung mit drei Positionen speichern.
- Sie per ID wieder laden und prüfen, ob Summen und Positionen übereinstimmen.
- Bestellungen nach Datumsbereich abfragen und prüfen, ob die Grenzen inklusive sind.
Gegen eine echte Datenbank kann dieser Test einen Tippfehler in einem Spaltennamen aufdecken, eine nie angewendete Migration, einen Fehler bei der Zeitzonenumrechnung oder eine Abfrage, die in einer In-Memory-Datenbank funktioniert, in PostgreSQL aber nicht.
Integrations- vs. Unit- vs. End-to-End-Test
| Unit | Integration | End-to-End | |
|---|---|---|---|
| Umfang | Eine Funktion oder Klasse | Einige Komponenten und ihre Schnittstellen | Das gesamte System, aus Nutzersicht |
| Abhängigkeiten | Durch Test-Doubles ersetzt | Echt an der getesteten Grenze | Alle echt |
| Geschwindigkeit | Millisekunden | Sekunden | Sekunden bis Minuten |
| Ein Fehlschlag zeigt auf | Ein bestimmtes Stück Logik | Eine bestimmte Schnittstelle | Irgendeine Stelle im System |
Ansätze
- Schmale Integrationstests prüfen jeweils eine Grenze (Service plus Datenbank), alles andere ist gestubbt. Sie sind schnell und präzise, und die meisten Teams wollen viele davon.
- Breite Integrationstests starten mehrere echte Services gemeinsam. Sie geben mehr Sicherheit, sind aber langsamer und schwerer zu diagnostizieren.
- Klassische Lehrbücher beschreiben außerdem Big-Bang-, Top-down- und Bottom-up-Integration, also die Reihenfolge, in der Module zusammengefügt werden. Im Interview hilft es, die Begriffe zu kennen, moderne Teams integrieren aber überwiegend kontinuierlich.
Häufige Fehler
- Eine langlebige Datenbank teilen – zwischen Tests und Entwicklern –, wodurch Ergebnisse von übrig gebliebenen Daten abhängen. Geben Sie jedem Lauf eine saubere Wegwerf-Instanz.
- Genau die Grenze mocken, die man testen wollte, wodurch aus dem Integrationstest wieder ein Unit-Test wird.