442 Stimmen

Was bedeutet "DAMP not DRY", wenn es um Unit-Tests geht?

Ich habe jemanden sagen hören, dass Einheitstests (z.B. nUnit, jUnit, xUnit) sein sollten

DAMPF no DRY

(z. B. sollten Einheitstests "feuchten Code" und nicht "trockenen Code" enthalten)

Wovon reden sie?

802voto

Chris Edwards Punkte 8020

Es ist ein Gleichgewicht, kein Widerspruch

DAMP und DRY sind keine Widersprüche, sondern sie balancieren zwei verschiedene Aspekte eines Codes aus Wartbarkeit . Wartbarer Code (Code, der leicht zu ändern ist) ist hier das ultimative Ziel.

DAMPF (Beschreibende und bedeutungsvolle Phrasen) fördert die Lesbarkeit des Codes.

Um Code zu pflegen, muss man ihn erst einmal verstehen. Um ihn zu verstehen, müssen Sie ihn lesen. Überlegen Sie einen Moment, wie viel Zeit Sie damit verbringen Lesen Code. Das ist eine Menge. DAMP erhöht die Wartbarkeit, indem es die Zeit reduziert, die zum Lesen und Verstehen des Codes notwendig ist.

DRY (Wiederholen Sie sich nicht) fördert die Orthogonalität des Codes.

Durch die Beseitigung von Duplikaten wird sichergestellt, dass jedes Konzept im System eine einzige maßgebliche Darstellung im Code hat. Eine Änderung eines einzigen Geschäftskonzepts führt zu einer einzigen Änderung des Codes. DRY erhöht die Wartbarkeit, indem Änderungen (Risiken) nur auf die Teile des Systems beschränkt werden, die sich ändern müssen.

Warum also ist die Duplizierung bei Tests akzeptabler?

Tests enthalten oft eine inhärente Duplizierung, da sie das Gleiche immer wieder testen, nur mit leicht unterschiedlichen Eingabewerten oder Setup-Code. Im Gegensatz zum Produktionscode ist diese Duplizierung jedoch in der Regel auf die Szenarien innerhalb einer einzelnen Testvorrichtung/-datei beschränkt. Aus diesem Grund ist die Duplikation minimal und offensichtlich, was bedeutet, dass sie ein geringeres Risiko für das Projekt darstellt als andere Arten der Duplikation.

Außerdem wird durch die Beseitigung dieser Art von Duplikaten die Lesbarkeit der Tests verringert. Die Details, die zuvor in jedem Test doppelt vorhanden waren, sind nun in einer neuen Methode oder Klasse versteckt. Um ein vollständiges Bild des Tests zu erhalten, müssen Sie nun all diese Teile mental wieder zusammensetzen.

Da die Duplizierung von Testcode häufig weniger Risiken birgt und die Lesbarkeit fördert, ist es leicht nachvollziehbar, dass sie als akzeptabel angesehen wird.

Grundsätzlich gilt: DRY im Produktionscode, DAMP im Testcode. Obwohl beide gleich wichtig sind, können Sie mit ein wenig Weisheit das Gleichgewicht zu Ihren Gunsten beeinflussen.

67voto

Dominic Rodger Punkte 93942

DAMP - Beschreibende und bedeutungsvolle Phrasen.

"DAMP not DRY" stellt die Lesbarkeit über die Wiederverwendung von Code. Die Idee von DAMP not DRY in Testfällen ist, dass Tests einfach zu verstehen sein sollten, auch wenn das bedeutet, dass Testfälle manchmal wiederholten Code enthalten.

Siehe auch Ist doppelter Code in Unit-Tests eher tolerierbar? für eine Diskussion über die Vorzüge dieses Standpunkts.

Der Begriff wurde möglicherweise geprägt von Jota Felder in Bezug auf die domänenspezifischen Sprachen.

29voto

Spudley Punkte 161296

"DRY" bedeutet "Wiederhole dich nicht".

Dieser Begriff wird verwendet, um darauf hinzuweisen, dass man Code schreiben soll, der wiederverwendbar ist, damit man nicht immer wieder ähnlichen Code schreiben muss.

"DAMP" steht für "Beschreibende und aussagekräftige Phrasen".

Dieser Begriff soll Ihnen sagen, dass Sie Code schreiben sollen, der von jemandem, der ihn betrachtet, leicht verstanden werden kann. Wenn Sie diesen Grundsatz befolgen, werden Sie lange und beschreibende Namen für Variablen und Funktionen usw. haben.

27voto

stuartd Punkte 65785

Damp = 'Descriptive And Meaningful Phrases' - Ihre Unit-Tests sollten 'gelesen' werden können:

Lesbarkeit ist wichtiger als die Vermeidung von redundantem Code.

Aus dem Artikel:

DAMP steht für "descriptive and meaningful phrases" (beschreibende und sinnvolle Sätze) und ist das Gegenteil von DRY, nicht in dem Sinne, dass es heißt "alles sollte wie ein Müllhaufen aussehen und unmöglich zu lesen sein", sondern dass die Lesbarkeit wichtiger ist als die Vermeidung von redundantem Code.

Was bedeutet das und wo ist es zu verwenden?

DAMP gilt vor allem beim Schreiben von Testcode. Der Testcode sollte so einfach zu verstehen sein, dass eine gewisse Redundanz akzeptabel ist.

14voto

SDC Punkte 13914

Es gibt hier bereits mehrere Antworten, aber ich wollte noch eine weitere hinzufügen, da ich der Meinung war, dass sie es nicht unbedingt so gut erklärt haben, wie sie es hätten tun können.

Die Idee von DRY (Don't repeat yourself) ist, dass in Ihrem Anmeldung Code wollen Sie redundanten oder reptetiven Code vermeiden. Wenn Sie etwas haben, das Ihr Code mehrfach tun muss, sollten Sie eine Funktion oder Klasse dafür haben, anstatt ähnlichen Code an mehreren Stellen zu wiederholen.

Dies ist ein recht bekanntes Programmierkonzept.

DAMP (Descriptive and Meaninful Phrases) ist für Ihre Unit-Tests gedacht. Die Idee dahinter ist, dass die Namen Ihrer Unit-Test-Methoden lang und beschreibend sein sollten - in kurzen Sätzen, die beschreiben, was Sie testen.

z. B: testWhenIAddOneAndOneIShouldGetTwo() { .... }

Wenn Sie einen DAMP-Methodennamen wie diesen lesen, sollten Sie genau verstehen, was der Testautor erreichen wollte, ohne den Testcode lesen zu müssen (obwohl der Testcode natürlich auch diesem Konzept folgen kann, mit wortreichen Variablennamen usw.).

Dies ist möglich, weil eine Unit-Test-Methode sehr spezifische Eingaben und erwartete Ausgaben hat, so dass das DAMP-Prinzip für sie gut funktioniert. Die Methoden in Ihrem Hauptanwendungscode sind wahrscheinlich nicht spezifisch genug, um solche Namen zu rechtfertigen, insbesondere wenn Sie sie nach dem DRY-Prinzip geschrieben haben.

DAMP und DRY stehen nicht im Widerspruch zueinander - sie decken verschiedene Aspekte der Art und Weise ab, wie Ihr Code geschrieben wird - aber dennoch werden sie normalerweise nicht zusammen verwendet, da Methoden, die mit dem DRY-Prinzip im Hinterkopf geschrieben wurden, allgemein anwendbar sind und sich wahrscheinlich nicht für sehr spezifische Methodennamen eignen. Im Allgemeinen sollte daher, wie oben erläutert, Ihr Anwendungscode DRY und Ihr Unit-Test-Code DAMP sein.

Ich hoffe, das hilft, das Ganze ein bisschen besser zu erklären.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X