Ein Integrationstest prüft mehrere Teile im Zusammenspiel, meist samt Datenbank. Er ruft einen ganzen Weg durch die Anwendung auf, etwa eine Adresse und die Antwort darauf.
- Integrationstest
Ein Test, der mehrere Teile im Zusammenspiel prüft, meist samt Datenbank.
Beispiel: „Der Integrationstest rief das Formular auf und prüfte, ob der Eintrag danach in der Datenbank stand.“In Laravel heißen diese Tests Feature-Tests und machen den größten Teil einer Testsuite aus; sie laufen gegen eine echte Datenbank, die vor jedem Test zurückgesetzt wird.
Abgrenzung zum Unit Testing: Dieses ersetzt alles Äußere durch Platzhalter. Der Integrationstest lässt die Teile wirklich zusammenarbeiten.
Was ein Integrationstest findet
Die Fehler in den Übergängen. Eine falsche Spalte im Abfrageergebnis, eine fehlende Berechtigung, eine Weiterleitung ins Leere, ein Formularfeld, das anders heißt als die Regel, die es prüft.
Genau diese Fehler sind in der Praxis die häufigen, weil jede einzelne Funktion für sich arbeitet und der Fehler erst im Zusammenspiel entsteht.
Was ein Integrationstest kostet
Laufzeit. Jeder Test braucht eine Datenbank in bekanntem Zustand, und das Zurücksetzen dauert; aus Millisekunden werden Zehntelsekunden, bei vielen Tests also Minuten statt Sekunden.
Dagegen helfen zwei Dinge: Transaktionen, die nach jedem Test zurückgerollt werden, statt die Datenbank neu aufzubauen, und das Aufteilen der Suite, damit mehrere Läufe gleichzeitig arbeiten, siehe Pipeline-Stage.
Wie ein Integrationstest zurückgesetzt wird
Über einen bekannten Anfangszustand. Entweder läuft jeder Test in einer Transaktion, die danach verworfen wird, oder die Datenbank wird je Lauf aus Migrationen und Fixtures neu aufgebaut.
Wichtig ist allein, dass kein Test von einem anderen abhängt. Tests, die in einer bestimmten Reihenfolge laufen müssen, sind die häufigste Ursache für Läufe, die mal durchgehen und mal nicht.