Nur ein Testprojekt zu erstellen und einige Testmethoden zu schreiben, ist eine Art TDD, aber meiner Erfahrung nach ist es keine große Hilfe, wenn Sie nicht an einer Bibliothek arbeiten, in der es eine bekannte API gibt und Methodenaufrufe direkt dem entsprechen, was der Benutzer erwartet . Sie müssen die richtige Liste von Tests erstellen, und für eine nicht triviale Anwendung kann dies sehr schwierig sein.
Ich empfehle, SpecFlow auszuprobieren. Es definiert weiterhin Tests, die gut von der Implementierung getrennt sind, und die Struktur der Feature-Dateien zwingt Sie dazu, darüber nachzudenken, was Sie tatsächlich testen.
Wenn Sie ein Feature definieren, schreiben Sie einfach so etwas wie
When a user is saved
Then the user should exist
Da Sie sich zu diesem Zeitpunkt noch nicht in einer Codedatei befinden, sind Sie nicht versucht, über Implementierungsdetails nachzudenken, z. B. welche Methode zum Erstellen eines Benutzers aufgerufen wird oder in welcher Klasse sie implementiert wird. Sie können Tags verwenden, um verschiedene Implementierungen auszuwählen. Auf dieser Ebene spielt es also keine Rolle, ob "Benutzer gespeichert" einen Aufruf von CreateUser oder das Öffnen eines Browsers und das Senden eines Formulars bedeutet.
Sobald Sie die Funktionen definiert haben, werden alle Tests generiert und beginnen zu bestehen, wenn Sie die Schrittdefinitionen und den tatsächlich getesteten Anwendungscode implementieren.
Für eine einfache App können Sie nur die Feature-Dateien erstellen. Für komplexere Anwendungen ist es jedoch hilfreich, vorher eine vollständigere Spezifikation zusammenzustellen. Ich verwende dafür eine iPad-Mindmapping-App, aber Sie können jedes Tool verwenden, mit dem Sie am besten vertraut sind.
Beginnen Sie mit einer Liste von Funktionen auf hoher Ebene wie "Benutzerregistrierung". Diese sind in der Regel zu umfangreich, um Tests direkt zu schreiben. Teilen Sie sie daher in Unterfunktionen auf, die klar definiert werden können und im Allgemeinen einer bestimmten Benutzeraktion wie "Benutzer speichern" oder "Vorhandenen Benutzer anzeigen" zugeordnet werden können.
Für jede dieser Unterfunktionen ist eine Liste von Szenarien erforderlich, die zusammen vollständig definieren, ob die Funktion funktioniert oder nicht. Dazu gehören beispielsweise "Kann einen gültigen Benutzer speichern" und "Ein Benutzer kann nicht mit doppeltem Benutzernamen gespeichert werden".
Wenn Sie diese Liste erstellen, wird im Allgemeinen klar, wo die Struktur angepasst werden muss. Wenn Sie keine Szenariotests für ein Feature erstellen können oder zu viele in einem Feature haben, wird dieses Feature wahrscheinlich unter definiert das falsche Level und muss aufgeteilt oder geändert werden.