Ich verstehe meistens die Theorie der TDD, aber ich kann nicht herausfinden, wie ich anfangen soll. Ich setze mich hin, um einen Unit Test für ein persönliches Projekt zu schreiben und umzusetzen. . . Ich habe keine Ahnung, was ich teste. Welche Objekte, welche Funktionen usw.
Nehmen wir zum Beispiel an, ich möchte eine App schreiben, die unserer Familie dabei hilft, Hausarbeiten zu erledigen. Ich habe folgende Fragen: Wie komme ich von dieser Idee zu meinem ersten Test? Wie viel sollte entschieden werden, bevor ich anfange, und wie viel muss ich herausfinden, nachdem ich angefangen habe, Tests zu schreiben? Wann entscheide ich mich für das Speichern von Daten in einer Textdatei oder einer Datenbank? Sollte ich Benutzerakzeptanztests durchführen lassen, bevor ich anfange? Soll ich die Benutzeroberfläche gestalten lassen? Soll ich eine Spezifikation haben? (Mir ist zumindest klar, dass sich einige dieser Beispielfragen wahrscheinlich in einer "Grauzone" befinden.)
Können Sie neben der Titelfrage zum ersten Komponententest auch ein Beispiel geben, wie der erste Komponententest für ein Projekt wie das Beispielprojekt aussehen könnte?
Antworten:
Ich beginne gerne mit einer Liste von Features und schreibe für jedes Feature die User Stories, dann schreibe ich für jede Story Testbeschreibungen.
Denken Sie ein wenig über das Design nach, wählen Sie dann eine Testbeschreibung und beginnen Sie mit der Codierung: Rot-Grün-Refaktor.
Wiederholen, bis alle Tests bestanden sind.
Ja, Akzeptanztests sollten als Teil davon betrachtet werden und der entsprechenden Geschichte beigefügt werden.
quelle
Sie haben von Anfang an herausgefunden, wie es bei TDD um Design geht . Bevor Sie Ihren ersten Test schreiben, müssen Sie sich überlegen, wie Ihre erste Funktionalität aussehen wird und wie Ihr Programm aussehen würde, wenn diese Funktionalität funktionieren würde.
Entwickler, die TDD nicht verwenden, müssen auch darüber nachdenken - aber sie können "einfach eintauchen" und anfangen, irgendetwas zu schreiben. Aber "irgendetwas, irgendetwas" ist nicht immer auf dem Weg, das Programm zu liefern, von dem Sie dachten, Sie wollten es schreiben. Was ist? Wie würde Ihr Programm aussehen, wenn es funktionieren würde? Welche Tests würde es bestehen?
Cool. Wenn diese App funktionieren würde, was würde sie tun? Nun, ein Job könnte wahrscheinlich einer Person zugewiesen werden, oder?
Es gibt einen Anfang. Nicht der Ort, an dem man anfangen muss, nicht unbedingt der beste Ort, an dem man anfangen muss - aber es ist ein Ort. Es ist etwas, das Ihr Code unterstützen soll (obwohl ich mir sicher bin, dass Sie sich bessere Namen einfallen lassen können). Fangen Sie dort an und beobachten Sie, wie es versagt. Lass es passieren. Mach es sauber. Aufschäumen, ausspülen, wiederholen.
quelle
Ja, TDD hat dieses Problem. Deshalb empfehle ich jetzt Behavior Driven Development.
Starten Sie manuell. Schreiben Sie etwas Ähnliches wie eine User Story auf:
Was sind nun die Merkmale, die dieses Ziel unterstützen (der Teil "So das")?
Dies sind alles Dinge, die Sie manuell überprüfen können und sollten.
Mach das für eine Weile. Suchen Sie dann wie ein guter Entwickler nach Möglichkeiten, redundante Teile zu automatisieren. Dies hängt von Ihrer Plattform ab, die meisten bieten jedoch angemessene Frameworks an.
.Net hat WatiN für die Automatisierung von Webseiten oder, wenn Sie eine API testen möchten, würde ich den Zusatz Subspec zu xUnit oder MSpec empfehlen das unterstützt diesen Denkstil).
Ruby hat Gurke für das Testen der Automatisierung und rspec für das Testen der API auf niedrigerer Ebene
Javascript hat Jasmin und qUnit.
Punkt Punkt Punkt
quelle
Teilen Sie Ihre Anwendung in mundgerechte Geschichten auf. ("Als Benutzer möchte ich auf ein Symbol doppelklicken und das Programm starten." Oder "Als Benutzer möchte ich meinen Browser öffnen und zum Programm gehen." Wie auch immer.)
Teilen Sie die Geschichte dann in einige Aufgaben auf. (z. B. ein Projekt in Eclipse erstellen, ein Code-Repository einrichten) Wenn Sie zu einer Codierungsaufgabe gelangen, schreiben Sie Ihren ersten Test.
Wenn Sie sich nicht sicher sind, wählen Sie diejenige aus, die einfacher zu sein scheint, und tun Sie dies. (wahrscheinlich die Textdatei) Wenn Sie feststellen, dass Sie einen Fehler gemacht haben, überarbeiten Sie. Wenn Ihre Tests gut strukturiert sind, sollten Sie in der Lage sein, das Back-End zu ändern und unbeabsichtigte Nebenwirkungen zu erkennen, die auftreten.
quelle
Ich bin überrascht , dass keine der Antworten einen Hinweis auf der tatsächlichen enthält Sache , dass Sie tun , direkt vor Ihrem ersten Test zu schreiben, das ist eine Testliste zu erstellen . Eine Testliste wird durch die in den anderen Antworten genannten Phasen zum Schreiben und Entwerfen von Storys informiert und ist der direkte Vorläufer für das Schreiben eines Tests, nach dem Sie scheinbar suchen.
Für weitere Informationen zu TDD würde ich Test Driven Development By Example von Kent Beck empfehlen . Er hat auch einen TDD-Screencast , der die Entwicklung einer nicht-trivialen Bibliothek in einem reinen TDD-Stil mit Erklärungen von Kent zu jedem Schritt des Prozesses verfolgt. Ich denke, es ist ein großartiges Beispiel für TDD in der Praxis, auch wenn es (notwendigerweise) in einer künstlichen Umgebung durchgeführt wird.
quelle
Vor dem ersten Unit-Test überlegen Sie, was passieren soll und wie Sie das testen würden. Schreiben Sie dann diesen Test, stellen Sie fest, dass er fehlschlägt, und implementieren Sie Code, damit er erfolgreich ist.
Spülen, wiederholen usw.
Für mich ist es wichtig, darüber nachzudenken, wie Sie es testen würden, und es ist das, was Ihr Design antreiben kann.
quelle