Automatisierte Tests werden in Unit-Tests, Integrationstests und End-to-End (E2E) Tests unterteilt, um die Überprüfung des Systems auf verschiedenen Ebenen umfassend abzudecken.
Geschichte der Frage: Diese Klassifizierung entstand aus der Notwendigkeit, Anwendungen sowohl in Teilen als auch im Ganzen zu testen. Daher werden Testschichten unterschieden:
Problem: Fehler treten häufig nicht nur in der Logik einer einzelnen Methode auf, sondern auch an den Schnittstellen von Komponenten oder beim "echten" Start des gesamten Systems mit externen Diensten. Wenn alles in einen Topf geworfen wird, ist es schwierig, einen Bug schnell zu lokalisieren oder zu verstehen, wo genau er aufgetreten ist.
Lösung:
Es ist lebensnotwendig, Testtypen zu unterscheiden, um:
Wichtige Merkmale:
Kann man Integrationstests einfach als "große" Unit-Tests betrachten?
Nein, Integrationstests überprüfen die Funktionsweise mehrerer Komponenten im Verbund und nicht nur einzelner Funktionen. Dabei ist es nicht immer möglich, Mocks zu verwenden – reale Dienste interagieren miteinander.
Müssen alle Tests End-to-End (E2E) sein?
Nein, das ist ein teurer und komplexer Ansatz. E2E-Tests sind nur für kritische Benutzerszenarien erforderlich; die meisten Logiken werden mit anderen Tests abgedeckt.
Sind Unit-Tests immer schnell?
Nicht immer. Es kann sein, dass isolierter Code nicht erreicht werden kann oder der Methode komplexe externe Ressourcen abhängen. In diesem Fall hört der Test auf, ein Unit-Test zu sein.
Im Unternehmen wurde die Hauptfunktionalität nur mit E2E-Tests abgedeckt – jede Änderung wurde nachts geprüft, die Tests fielen instabil aus, Bugs wurden spät entdeckt.
Vorteile:
Nachteile:
Das Team baute eine Testpyramide auf: unten – Unit-Tests, in der Mitte – Integrationstests, oben – nur die wichtigsten E2E.
Vorteile:
Nachteile: