7.2.4. Tests müssen unabhängig voneinander sein

Mit dieser Empfehlung streifen wir wieder ein Thema, das kontrovers diskutiert wird: Müssen Tests unabhängig voneinander sein?

Was bedeutet „Unabhängigkeit“ an dieser Stelle? Es gibt Stimmen, die propagieren, dass Tests auf den Ergebnissen anderer Tests aufsetzen sollen bzw. dürfen. Die Unabhängigkeit ist an dieser Stelle nicht gegeben, da der nachfolgende Test ohne den vorherigen nicht korrekt ausgeführt werden kann. Wenn der erste Test also fehlerhaft ist, wird der zweite Test auch fehlschlagen. Änderungen an dem ersten Test erfordern Änderungen an dem zweiten Test, wobei diese Abhängigkeit maximal im Javadoc sichtbar ist. Verwendet der Test ggf. weitere Bedingungen von anderen Tests und wie erkennt der Entwickler diese Abhängigkeiten?

Durch diese Abhängigkeiten sind nicht mehr alle Tests einzeln ausführbar. Tritt ein Fehler in einem Regressionstest auf, muss der Entwickler herausfinden, auf welche Tests der fehlschlagende Test aufsetzt, damit das Problem lokal reproduziert werden kann. Im schlimmsten Fall setzt sich die Abhängigkeit bis zum ersten Test fort. Dann wäre die gesamte Test-Suite nur als Ganzes ausführbar.

Die Intransparenz der Abhängigkeiten führt langfristig zu einem sehr aufwändigen Prozess zur Testerstellung und –pflege. Dieser Preis ist zu hoch für die Zeit- und Ressourcen-Einsparungen, die durch abhängige Tests ermöglicht werden. Daher sollten Tests immer unabhängig voneinander sein.