Historie der Frage:
Das Arrange-Act-Assert (AAA) Muster wurde vorgeschlagen, um die Struktur von Tests zu vereinfachen und deren Lesbarkeit zu erhöhen. Es wird aktiv in modernen Test-Frameworks verwendet und ist der De-facto-Standard beim Schreiben von automatisierten Tests jeglicher Art.
Problem:
Ohne eine klare Struktur werden Testfälle unhandlich, schwer lesbar und schwierig zu warten. Es entsteht Verwirrung zwischen der Vorbereitung von Daten, dem Aufruf des zu testenden Verhaltens und der Überprüfung des Ergebnisses. Dies führt zu einer Ansammlung von technischem Schulden und Fehlern in den Tests.
Lösung:
Streng an das AAA-Muster beim Schreiben des Tests halten.
Schlüsselfunktionen:
Kann man die Reihenfolge von AAA brechen, wenn der Test offensichtlich scheint?
In der Regel nicht. Jede Abweichung von der AAA-Struktur verringert die Lesbarkeit des Tests für andere Entwickler und macht ihn anfällig für Fehler bei der Wartung.
Ist es erlaubt, Act und Assert in einer einzigen Ausdruck für kurze Tests zu kombinieren?
Besser, dies zu vermeiden, da es das Verständnis und die mögliche Erweiterung des Tests in der Zukunft erschwert.
Sollte die Logik zur Bereinigung von Daten (Cleanup) in die Arrange-Phase einbezogen werden?
Nein. Cleanup oder Teardown wird normalerweise in separaten Methoden implementiert, z. B. in Hooks des Test-Frameworks (After, AfterEach).
Ein Test zum Hinzufügen eines Datensatzes in die Datenbank prüft zuerst, und fügt dann hinzu. Ein zufälliger Assert stört die Mitte.
Vorteile:
Nachteile:
Der Test beginnt mit der Bereinigung von Daten, dann folgt das Hinzufügen des Datensatzes, und erst danach die Überprüfung des Ergebnisses, strikt nach AAA.
Vorteile:
Nachteile: