Die Implementierung von Testfixtures ist ein Schlüsselelement des automatisierten Testens, das die Vorbereitung der Umgebung, der Daten und der Abhängigkeiten für Testfälle gewährleistet.
Hintergrund Fixtures wurden im automatisierten Testen als Mittel eingeführt, um die Vorbereitung und Bereinigung der Umgebung vor der Ausführung von Tests zentral zu steuern. Damit erreichten die Teams Konsistenz und Vorhersagbarkeit der Tests, was besonders wichtig ist, wenn sich der Code ständig ändert.
Problem Ohne die richtigen Fixtures werden automatisierte Tests instabil, hängen voneinander ab, stören sich gegenseitig beim parallelen Ausführen und erhöhen zudem die technische Schuld (da die Setup/Teardown-Logik dupliziert und aufgebläht wird).
Lösung
Verwenden Sie die standardmäßigen Fixture-Mechanismen, die von Testframeworks bereitgestellt werden (z. B. @BeforeAll, @BeforeEach in JUnit oder conftest.py in pytest). Versuchen Sie, Fixtures konfigurierbar und isoliert zu gestalten:
Wesentliche Merkmale:
Kann man in einem Test Objekte, die durch das Fixture erstellt wurden, ändern, wenn sie von den nächsten Tests benötigt werden?
Nein, das würde die Tests voneinander abhängig machen: Änderungen, die ein Test vornimmt, könnten einen anderen brechen. Es ist besser, frische Objekte für jeden Test zu verwenden oder die Änderungen nach jeder Ausführung zurückzusetzen.
Warum nicht die gesamte Datenbank einmalig zu Beginn des Ablaufs der automatisierten Tests laden, um den Prozess zu beschleunigen?
Dieser Ansatz kann zu instabilen Tests und schwer greifbaren Bugs führen. Daten könnten zwischen den Tests „hängen bleiben“, und die Reihenfolge ihrer Ausführung würde kritisch werden.
Kann man ein globales Fixture für die gesamte Testsuite verwenden?
Nein, globale Fixtures sind nur für vollständig unabhängige Tests zulässig. Normalerweise führt dieser Ansatz zu wechselseitigen Einflüssen zwischen den Tests, was die Analyse und Wartung erschwert.
Im Projekt entschied man sich, Zeit zu sparen und automatisierte Tests auf einer Datenbank auszuführen, ohne die Änderungen nach jedem Test zurückzusetzen. Nach dem Auftreten von Tests, die dieselben Daten ändern, traten flüchtige Fehler auf: Die Tests fielen abwechselnd aus, je nach Ausführungsreihenfolge.
Vorteile:
Nachteile:
Es wurden Factory-Fixutres verwendet: Jeder Test erstellt seine Daten und entfernt sie nach Abschluss. Alte Bugs treten nicht mehr auf, die Reihenfolge der Tests spielt keine Rolle.
Vorteile:
Nachteile: