Blog

Die 5 Richtlinien für Unit-Tests

Aktualisiert Oktober 21, 2025
5 Minuten

Ein Unit-Test ist eine kleine automatisierte Prüfung. Er prüft ein winziges Stück Software. Unit-Tests können relativ einfach geschrieben werden und laufen in wenigen Millisekunden ab. Sie werden in der Regel automatisch ausgelöst, wenn jemand Code an ein Repository sendet, so dass die Qualität der Software automatisch überprüft wird, bevor sie in der Produktionsumgebung eingesetzt wird.

In der Realität sind Unit-Tests oft alles andere als klein. Sie sind oft schwer zu pflegen und es ist schwer zu verstehen, was der getestete Code eigentlich tun sollte, wenn ein Test fehlschlägt. Infolgedessen werden Unit-Tests zu einer kostspieligen Übung, die das Team ausbremst, und die Testergebnisse sind nicht wirklich aussagekräftig.

Die folgenden Richtlinien beschreiben, wie man richtige Unit-Tests schreibt:

  • Unit-Tests haben eine Assert pro Test.
  • Vermeiden Sie if-Anweisungen in einem Einheitstest.
  • Bei Unit-Tests wird nur die zu testende Unit "new()".
  • Unit-Tests enthalten keine fest codierten Werte, es sei denn, sie haben eine bestimmte Bedeutung.
  • Unit-Tests sind zustandslos.

Leitlinie №1.) Eine Behauptung pro Test

Unit-Tests sollten eigentlich klein sein. In Wirklichkeit sind sie das aber oft nicht. Viele Codebasen enthalten Tests mit mehreren Asserts, die daher umfangreiche Setups erfordern. Das macht es schwer, ihre Gültigkeit zu beurteilen, und es wird unklar, wann ein neuer Unit-Test erstellt oder ein bestehender ergänzt werden sollte. Das Ergebnis ist, dass diese Art von Tests wachsen und wachsen:

 

progressive Medien

Vermeiden Sie diese! Unvollständiger, großer Test mit vielen Asserts, die zu undeskriptiven Namen führten.

 

Test = Dokumentation. Eine einzige Behauptung pro Test garantiert, dass nur eine Sache getestet wird. Wenn Sie einen beschreibenden Namen wählen, der mit dieser Behauptung korreliert, erhalten Sie einen vollständigen Überblick darüber, was die Einheit tut. Das ist einfach zu erweitern und zu validieren. Als Bonus werden die Tests auch zu einer lebendigen Dokumentation!

Behandeln Sie Unit-Tests wie Produktionscode. Halten Sie ihn wartbar. Wiederholen Sie sich nicht. Verwenden Sie kleine, klare Methoden mit eindeutigen Namen und einer einzigen Verantwortung. Große Methoden sind ein Anti-Muster. Sie sind schwer zu verstehen, potenziell fehlerhaft und stellen ein potenzielles Wartungsproblem dar. Schreiben Sie kleine Einheitstests mit einer Behauptung pro Test:

 

progressives Medienimage

Löschen Sie Namen mit einer Behauptung pro Test.

 

Leitlinie №2.) Vermeiden Sie if-Anweisungen in einem Test

Eine if-Anweisung in einem Test bedeutet, dass der Test je nach Situation verschiedene Dinge tun soll. Wenn-Anweisungen müssen getestet werden. Wie werden Sie den Test testen? Und werden Sie den Test testen, der den Test testet? Wo wird er enden?

Aus der Sicht der Anforderungen funktioniert etwas entweder oder es funktioniert nicht. Das ist statisch. Das Ergebnis eines Tests wird weniger vertrauenswürdig, wenn der Test dynamisch ist. Und Tests werden dynamisch, wenn sie je nach Situation unterschiedliche Dinge tun.

Leitfaden №3.) Unit-Tests testen nur "new()" die zu testende Einheit.

Unit-Tests sind klein. Der Testumfang eines Unit-Tests ist auf eine einzige Methode oder Klasse beschränkt. Aus dieser Perspektive wäre es sinnvoll, das Schlüsselwort "new ()" nur für die Instanziierung der Klasse zu verwenden, die die zu testende Methode enthält.

Wenn Sie verschiedene Klassen kombinieren, verschiedene Eingaben durch sie laufen lassen und das Ergebnis überprüfen, wird der Test weniger zielgerichtet. Welche Klasse muss repariert werden, wenn der Test fehlschlägt? Beispiel:

 
progressives Medienimage
Vermeiden Sie diese! Welche Klasse muss repariert werden, wenn der Test fehlschlägt? Kalender oder Zeitplan?

Instanzieren Sie nicht die Abhängigkeiten der Klasse, die Sie testen, mit dem Schlüsselwort "new ()". Verwenden Sie Frameworks wie Moq oder NSubstitute, um Mocks und Stubs zu erstellen, die sie ersetzen. Auf diese Weise sind die Tests zielgerichteter und liefern ein besseres Feedback:

 
progressives Medienimage
In Ihrem Unit-Test instanziieren Sie nur die zu testende Einheit (Kalender). Der Fehler muss sich in der Klasse Calendar befinden.  

Leitlinie №4.) Unit-Tests enthalten keine fest kodierten Werte, es sei denn, sie haben eine bestimmte Bedeutung

Unit-Tests sollen beschreibend sein: Wenn der Code bei einer bestimmten Eingabe ausgeführt wird, muss das Ergebnis etwas sein.

Kodieren Sie die Testdaten nicht fest. Das macht es schwieriger, den Test zu verstehen. Angenommen, der folgende Test schlägt fehl. Würden Sie wissen, wo das Problem liegt? Sie werden debuggen müssen, um herauszufinden, was falsch ist:

 
progressiveMedia-image
Vermeiden Sie diese: Wenn ein solcher Test fehlschlägt, ist es schwer herauszufinden, was falsch ist.

Wenn Fixtures mit einem Framework generiert werden, wird der Test viel klarer. Wenn der folgende Test fehlschlägt, bedeutet dies, dass ein Code zur Validierung einer Telefonnummer geändert wurde. Sie müssen nicht debuggen, um das herauszufinden:

 
progressives Medienimage
Definieren Sie nur die Eigenschaften, die die Logik auslösen, die Sie testen wollen. In diesem Fall, , sollte es offensichtlich sein, dass etwas bei der Validierung einer Telefonnummer nicht funktioniert, wenn dieser Test fehlschlägt.

Leitfaden №5.) Unit Tests sind zustandslos

Nichts ist schlimmer als bestandene Tests und eine fehlerhafte Anwendung in der Produktion. Zustandsbezogene Tests können falsch-positive Ergebnisse liefern. Nehmen wir das folgende Beispiel:

 
progressives Medienimage
Vermeiden Sie diese: Zustandsbezogene Unit-Tests machen das Ergebnis des Tests fragwürdig.

Angenommen, der Test GivenAppointment_ThenErrorOccurs wird zuerst ausgeführt, dann erzeugt der Test GivenAppointmentThenAppointmentAppearsInList entweder einen falsch positiven oder einen falsch negativen Wert.

Entwickeln Sie Unit-Tests so, dass sie vertrauenswürdig sind. Entwickeln Sie sie so, dass sie unabhängig von der Reihenfolge ihrer Ausführung erfolgreich sind. Das Ergebnis der Tests muss immer gleich sein, egal wie oft sie ausgeführt werden.


Kleine, zuverlässige, schnelle, gezielte und vertrauenswürdige Unit-Tests sind eine solide Grundlage für eine effektive Testautomatisierungsstrategie. Unit-Tests allein sind nicht genug. Sie testen nur kleine Teile der Software in Isolation. Da die Kombination mehrerer Einheiten den Geschäftswert schafft, ist es entscheidend, auch diese zu testen. Sie brauchen verschiedene Arten von Tests an verschiedenen Stellen, um die Qualität der Software sicherzustellen. Lesen Sie weiter: Lesen Sie, wie Sie eine effektive Strategie zur Testautomatisierung erstellen.

Contact

Let’s discuss how we can support your journey.