Duplizierter Code ist im Unit-Test-Code genauso ein Geruch wie in anderem Code. Wenn Sie Code in Tests dupliziert haben, ist es schwieriger, den Implementierungscode umzugestalten, da Sie überproportional viele Tests aktualisieren müssen. Tests sollten Ihnen dabei helfen, sicher umzugestalten, anstatt eine große Belastung zu sein, die Ihre Arbeit an dem zu testenden Code behindert.
Wenn sich die Duplizierung im Fixture-Setup befindet, sollten Sie die setUp
Methode stärker nutzen oder mehr (oder flexiblere) Erstellungsmethoden bereitstellen .
Wenn sich die Duplizierung im Code befindet, der das SUT manipuliert, fragen Sie sich, warum mehrere sogenannte "Unit" -Tests genau dieselbe Funktionalität ausüben.
Wenn die Duplizierung in den Zusicherungen enthalten ist, benötigen Sie möglicherweise einige benutzerdefinierte Zusicherungen . Zum Beispiel, wenn mehrere Tests eine Reihe von Aussagen haben wie:
assertEqual('Joe', person.getFirstName())
assertEqual('Bloggs', person.getLastName())
assertEqual(23, person.getAge())
Dann brauchen Sie vielleicht eine einzige assertPersonEqual
Methode, damit Sie schreiben können assertPersonEqual(Person('Joe', 'Bloggs', 23), person)
. (Oder Sie müssen den Gleichheitsoperator einfach überladen Person
.)
Wie Sie bereits erwähnt haben, ist es wichtig, dass der Testcode lesbar ist. Insbesondere ist es wichtig, dass die Absicht eines Tests klar ist. Ich finde, wenn viele Tests größtenteils gleich aussehen (z. B. drei Viertel der Linien gleich oder praktisch gleich), ist es schwierig, die signifikanten Unterschiede zu erkennen, ohne sie sorgfältig zu lesen und zu vergleichen. Daher finde ich, dass Refactoring zum Entfernen von Duplikaten die Lesbarkeit verbessert, da jede Zeile jeder Testmethode direkt für den Zweck des Tests relevant ist. Das ist für den Leser viel hilfreicher als eine zufällige Kombination von Zeilen, die direkt relevant sind, und Zeilen, die nur als Boilerplate dienen.
Allerdings üben Tests manchmal komplexe Situationen aus, die ähnlich, aber immer noch erheblich unterschiedlich sind, und es ist schwierig, einen guten Weg zu finden, um die Doppelarbeit zu reduzieren. Verwenden Sie den gesunden Menschenverstand: Wenn Sie der Meinung sind, dass die Tests lesbar sind und ihre Absicht klarstellen, und Sie möglicherweise mehr als eine theoretisch minimale Anzahl von Tests aktualisieren müssen, wenn Sie den von den Tests aufgerufenen Code umgestalten, akzeptieren Sie die Unvollkommenheit und verschieben Sie sie auf etwas produktiveres. Sie können jederzeit zurückkommen und die Tests später umgestalten, wenn Inspiration aufkommt!