Ich sehe den Vorteil von TDD, und ich versuche zu lernen, wie ich meinen Kopf darum wickeln kann. Ich lese auch mehr über DDD und möchte beide auf meine Softwareprojekte anwenden.
Ich habe ein paar "Hands on" Programmierbücher gekauft (mit "Hands on" meine ich diejenigen, die eine echte Weltanwendung mit echten Lösungen im Gegensatz zu kleinen Schnipsel diskutieren) und ich habe bemerkt, dass sie typischerweise anfangen, das zu definieren "Infrastruktur" -Schicht der Anwendung in traditioneller Code-First-Mode, im Gegensatz zur Verwendung von TDD; Beide Bücher geben sich alle Mühe, um zu diskutieren, wie gut TDD ist und wie die Fallstudie es nutzen wird.
Zum Beispiel in einem der Bücher ASP.NET 3.5 Social Networking entwickelt das gesamte zweite Kapitel eine Protokollierungs-Wrapper-Klasse, eine E-Mail-Wrapper-Klasse, Cache- und Session-Wrapper-Klassen (und ihre zugehörigen Schnittstellen) ) alles ohne einen einzigen Komponententest zu berühren. Ein anderes Buch, .NET Domain Driven Design mit C #: Problem, Design, Lösung macht ähnlich und erstellt einen Basisklassen- und Repository-Framework-Code, bevor der "echte" Code überhaupt berührt wird.
>Ich verstehe, dass Sie die tatsächliche Logik und Funktionalität Ihrer Domänenklassen testen sollten. Ich hatte gedacht, dass der "do not plumbing" Code nur auf Code angewendet wird, den Sie nicht geschrieben haben (zB eingebaute .NET Klassen), aber was ich lese scheint darauf hinzuweisen, dass Sie nur den Code testen sollten Das hat tatsächlich mit Ihrer Anwendung zu tun und nicht mit den Klempnerarbeiten, die Sie schreiben, um eine Grundlage zu schaffen.
Ist das ein akzeptabler Weg TDD anzuwenden?
Es hängt wahrscheinlich von anderen Faktoren ab, wie Sie Ihr Projekt aufbauen wollen.
Wenn Sie andere Agile-Praktiken wie kleine Iterationen und Lieferungen befolgen, haben Sie am Anfang nicht viel von einer Architektur oder Infrastruktur, weil Sie während der Implementierung keine Zeit haben, sich viel zu entwickeln und die ersten paar Features liefern. Wie auch immer, warum sollten Sie Zeit mit Big Design Up Front verbringen, wenn Sie nicht wirklich wissen, was der Code braucht?
Sie werden also zuerst und über mehrere Iterationen hinweg Ihren Code-Test erstellen. Testabdeckung bedeutet, dass Sie Ihren Entwurf umgestalten können, was (in der Theorie) genau die richtige Infrastruktur für die Anwendung ermöglicht, so wie sie zu jedem Zeitpunkt existiert. Ron Jeffries erklärt es hier gut . Ohne die Tests werden Sie wahrscheinlich einen Punkt erreichen, an dem Sie aufhören und herausfinden müssen, wie die Struktur aussehen soll. Das wird Zeit brauchen, die Sie besser für den Aufbau nützlicher Funktionen aufwenden können und die Sie benötigen am Ende sowieso testen.
Wenn Sie 100% ig sicher sind, dass Sie das Design korrekt entwerfen können, bevor Sie einen Code geschrieben haben, haben Sie die Wahl. Stellen Sie sicher, dass Sie viel Zeit für das Testen in dem Projekt lassen. Ich denke, jeder sollte mindestens eine bedeutende Arbeit leisten, sowohl durch den "traditionellen" Wasserfall-Prozess als auch durch einfaches Eintauchen und Kodieren, um etwas Erfahrung zu sammeln, die die agilen Praktiken in einen Kontext bringt. Sonst besteht die Gefahr, "was" zu wissen, ohne "warum" zu kennen, und das macht den Unterricht schwieriger zu lernen.
Wenn Sie die Rohrleitungen von Grund auf neu schreiben, sollten Sie Tests haben. Wenn Sie nur ein paar Interfaces und Klassen verwenden, um Ihre Linq2sql-Aufrufe wegzuspulen, dann würde ich nicht unbedingt Unit-Tests darum herum machen.
Um jemanden schlauer als ich:
Ich bin nicht religiös gegenüber TDD. ich halte es für eine Disziplin, die es wert ist Folgendes. Ich schreibe nicht alle meine Tests zuerst. Einige wenige von ihnen sind einfach bequemer nach zu schreiben der Code. Es gibt sogar einen Code, den ich kenne schreibe überhaupt keine Tests, weil es ist es einfach nicht wert. Aber das sind sie Ausnahmen von der Regel. Die Weite Die Mehrheit des Codes, den ich schreibe, schreibe ich zuerst testen.
- Onkel Bob Martin über: Ссылка
Wenn Sie Code testen und anderen Code nicht testen, welcher Code enthält die Fehler?
Hinweis: Es ist der ungeprüfte Code.
Ich bin kein Experte hier.
Aber wenn Sie Sanitärkomponenten entwickeln, sollte es getestet werden.
Wenn ich richtig verstehe, mit TDD, Code geschrieben gegen Schnittstelle & amp; In Abwesenheit von Sanitärkomponenten verwenden Menschen Mock-Objekte.
Ich habe das ausführlich in eine andere Frage . Im Grunde ist der Sinn der Verwendung von TDD und Mocks und all dem Zeug, mehr Vertrauen zu entwickeln.
TDD sollte auf jeden von Ihnen entwickelten Code angewendet werden. Wenn Sie TDD verwenden, müssen Sie nicht alles testen - d. H. Das Ziel ist keine 100% ige Abdeckung - aber die Abdeckung sollte über den von Ihnen entwickelten Code ziemlich hoch sein. Zum Beispiel müssen Sie in C # keine automatischen gettor / settors testen - Sie können darauf vertrauen, dass die Sprache dort ihre Aufgabe erfüllt. Im Zweifelsfall schreiben Sie zuerst den Test.
Schreiben Sie auf jeden Fall Code-First, um Erfahrung mit einer Plattform zu sammeln - seien Sie einfach mutig und werfen Sie sie weg, sobald Sie sicher sind, dass Sie die meisten Aufgaben auf dieser Plattform bewältigen können. Ich habe das gerade mit einem kleinen Java-Programm gemacht, das ich angefangen habe.
Jetzt, wo ich etwas Erfahrung gesammelt habe, kann ich sehen, was ich tun muss, um eine sehr hohe Reichweite zu erreichen, jetzt, wo ich anfange, es zuerst zu schreiben, sogar die meisten Rohrleitungen.
Tags und Links tdd