Testare l'interfaccia utente è problematico perché spesso non si sa quello che si desidera sullo schermo finché non lo si vede sullo schermo. Per questo motivo, lo sviluppo della GUI tende ad essere massicciamente iterativo e quindi molto difficile da guidare con i test.
Ciò non significa che abbandoniamo semplicemente TDD per le GUI. Piuttosto, spingiamo più codice possibile dalla GUI, lasciandoci dietro solo un semplice codice di cablaggio. Questo cablaggio ci consente di apportare i cambiamenti massicciamente iterativi di cui abbiamo bisogno, senza compromettere l'essenza del problema.
Questa tecnica è stata probabilmente descritta meglio da Michael Feathers alcuni anni fa in un articolo intitolato "The Humble Dialog Box". È anche l'idea fondamentale alla base dello schema Model-View-Presenter che ha suscitato tanto scalpore quattro anni fa; e ora è stato suddiviso in schemi di visualizzazione passiva e controller di supervisione. Il collegamento dell'articolo in questa domanda sfrutta queste idee, ma in un test-dopo piuttosto che in un modo guidato dai test.
L'idea è di testare tutto tranne la vista. In effetti, non abbiamo nemmeno bisogno di scrivere la vista per un bel po 'di tempo. In effetti, la View è così assurdamente semplice che probabilmente non ha bisogno di alcun tipo di test unitario. O se lo fa, in realtà possono essere scritti per ultimi.
Per testare il controller di supervisione è sufficiente assicurarsi di aver compreso come i dati verranno presentati sullo schermo. Non è necessario sapere dove sono i dati, o qual è il carattere, o di che colore è, o uno qualsiasi degli altri problemi estetici che causano l'enorme iterazione di interfacce grafiche. Piuttosto, sai che un dato sarà una sorta di campo di testo. Un altro sarà un menu, un altro ancora sarà un pulsante o una casella di controllo. E poi ti assicuri che la Vista possa porre tutte le domande di cui ha bisogno per ottenere il corretto rendering di questi oggetti.
Ad esempio, la casella di testo potrebbe avere un valore predefinito. La vista dovrebbe essere in grado di chiederlo. Il menu potrebbe contenere alcuni elementi in grigio. La vista dovrebbe essere in grado di chiedere queste informazioni. Le domande che la vista richiede riguardano la presentazione e sono prive di regole aziendali.
Allo stesso modo, la vista dirà al supervisore di supervisione quando qualcosa cambia. Il controllore modificherà i dati in modo appropriato, includendo qualsiasi tipo di convalida e ripristino degli errori, e quindi la vista può chiedere come devono essere presentati tali dati.
Tutto questo può essere guidato da test perché è tutto disaccoppiato dal display. Si tratta di come i dati vengono manipolati e presentati, e non su ciò che sembra. Quindi non ha bisogno di essere massicciamente iterato.