Solo la creazione di un progetto di test e la scrittura di alcuni metodi di test è una sorta di TDD, ma nella mia esperienza non è di grande aiuto a meno che non si stia lavorando su una libreria in cui è presente un'API nota e le chiamate al metodo corrispondono direttamente a qualcosa previsto dall'utente . Devi trovare il giusto elenco di test e, per un'applicazione non banale, può essere davvero difficile da fare.
Consiglio di provare SpecFlow: continua a definire i test ben separati dall'implementazione e la struttura dei file delle caratteristiche ti costringe a pensare a ciò che stai effettivamente testando.
Quando definisci una funzione scrivi semplicemente qualcosa di simile
When a user is saved
Then the user should exist
Poiché a questo punto non ti trovi in un file di codice, non sei tentato di pensare ai dettagli dell'implementazione come ad esempio quale metodo viene chiamato per creare un utente o persino in quale classe è implementata. Puoi utilizzare i tag per scegliere diverse implementazioni, quindi a questo livello non importa se "l'utente è salvato" significa una chiamata a CreateUser o l'apertura di un browser e l'invio di un modulo.
Dopo aver definito le funzionalità, tutti i test vengono generati e inizieranno a passare man mano che si implementano le definizioni dei passaggi e il codice dell'applicazione effettivo testato.
Per una semplice app puoi semplicemente creare i file delle funzionalità, ma per qualcosa di più complesso è utile mettere insieme una specifica più completa. Per questo utilizzo un'app per la creazione di idee per iPad, ma puoi usare qualsiasi strumento tu ti trovi più a tuo agio.
Inizia con un elenco di funzionalità di alto livello come "Registrazione utente". Questi tendono ad essere troppo ampi per poter scrivere direttamente i test, quindi suddividili in funzioni secondarie che possono essere chiaramente definite e generalmente mappate su un'azione specifica dell'utente come "Salva utente" o "Visualizza utente esistente".
Ognuna di queste funzionalità secondarie avrà bisogno di un elenco di scenari che insieme definiscono completamente se la funzionalità funziona o meno, cose come "Può salvare un utente valido" e "Impossibile salvare un utente con un nome utente duplicato".
Man mano che crei questo elenco, in genere diventerà chiaro dove è necessario modificare la struttura: se non riesci a trovare test di scenario per una funzionalità o se ne finisci con troppe in una funzionalità, tale funzione è probabilmente definita in il livello sbagliato e deve essere diviso o modificato.