Blog

Warum dumme Tests klug sind

Roy Straub

Roy Straub

Aktualisiert Oktober 15, 2025
3 Minuten

Das Schreiben von Tests, die bei der Entwicklung eines Systems helfen, ist schwierig, und Sie erreichen Ihr Ziel, indem Sie intelligente Tests vermeiden und dumme Tests bevorzugen. Lassen Sie uns eintauchen.

Das Paradoxon der intelligenten Tests

Klug ist immer besser als dumm, nicht wahr? Vielleicht, vielleicht aber auch nicht. Dieses Mal befassen wir uns mit dem Paradoxon, dass dumme Programmierertests den intelligenten Tests überlegen sind. Dieses Paradoxon verlangt nach einer Erklärung, aber zunächst müssen wir uns überlegen, wie Tests sein sollten.

Gewünschte Qualitäten von Programmiertests ☝️

Gut geschriebene automatisierte Tests sind:
  • Leicht zu lesen
  • Absicht aufdecken
  • Fokussiert
Kurz gesagt: Programmiertests sollten Änderungen einfach machen. Ändern Sie den zu testenden Code und den Testcode selbst. Wie können Sie das erreichen? Schreiben Sie einfache, geradlinige oder "dumme" Tests, keine komplizierten und voller Magie steckenden oder "intelligenten" Tests. Werfen wir zunächst einen Blick auf die intelligenten Tests.

Anatomie eines intelligenten Tests

Was ist also ein intelligenter Test? Intelligente Tests enthalten eine Logik, die die wahre Bedeutung des Tests verschleiert. Diese Logik könnte zum Beispiel für eines der folgenden Ziele gelten:
  • Erfassen einer gemeinsamen Einrichtung
  • Erstellen von Test-In- oder Output
  • Verringerung der Anzahl der Testschritte
Sie alle versuchen, Doppelarbeit zu vermeiden. Im Allgemeinen ist das eine gute Sache. Das DRY-Prinzip (Don't Repeat Yourself) ist eine ausgezeichnete Heuristik, um zu einem wartbaren Code zu gelangen. Aber wie immer gibt es einen Preis. Der Preis besteht in der Regel darin, dass der Code weniger anschaulich ist; er ist nicht mehr so einfach zu verstehen. Ich bin zum Beispiel auf Tests gestoßen, für die ich Stunden brauchte, um sie zu verstehen, weil die Eingabedaten dynamisch generiert, gefiltert und transformiert wurden. Das spart vielleicht Codezeilen, aber der Leser hat es mit der Komplexität zu tun. Da wir nun wissen, was intelligente Tests sind, wollen wir sehen, wie dumme Tests im Vergleich dazu aussehen.

Überlegenheit von Dummheitstests

Dumme Tests enthalten keine Magie und erfordern keine geistige Gymnastik, um sie zu verstehen. Sie sind leicht zu lesen und enthüllen Ihre Absichten. Großartige Tests mögen DRY sein, aber die besten Tests folgen dem DAMP-Prinzip (Descriptive and Meaningful Phrases). Code bewegt sich immer auf einem Spektrum zwischen Explizitheit und der Vermeidung von Duplikaten, und es liegt an Ihnen, eine gute Balance zu finden. Bei Tests sollte die Fähigkeit, ihre Bedeutung zu vermitteln, über allem stehen. Das liegt daran, dass ein Hauptziel von Programmiertests darin besteht, den Produktionscode zu erklären, wie ich hier bereits erwähnt habe. Das Letzte, was Sie wollen, ist, dass Sie zusätzlich zum Verständnis des Produktionscodes auch noch die Bedeutung der Tests entschlüsseln müssen. Es gibt Strategien, um zu Tests zu gelangen, die sowohl anschaulich als auch leicht zu pflegen sind, wie z.B.: Die sicherste Heuristik ist jedoch, sich zu fragen, ob der Code das Verständnis eines Tests für zukünftige Leser fördert oder verhindert. Das gilt natürlich auch für Produktionscode!

Fazit

Klug ist nicht immer besser, vor allem, wenn es um Tests geht. Idealerweise sollten Programmiertests einfach zu lesen sein und ihre Absicht klar zum Ausdruck bringen, aber das ist schwierig. Sie gelangen zu großartigen Tests, indem Sie sich in die Lage des zukünftigen Lesers versetzen. Außerdem machen Sie Ihre Tests DAMP statt DRY, indem Sie die Aussagekraft über die Vermeidung von Duplikaten stellen. Das Ergebnis sind automatisierte Tests, die als Katalysator für Veränderungen dienen, anstatt sie zu behindern.  

Verfasst von

Roy Straub

Passionate about Software Craftsmanship. Interested in subjects such as Clean Code, Domain Driven Design and Extreme Programming. Happily coding since 2010.

Contact

Let’s discuss how we can support your journey.