Questo test sta excerising un'interfaccia e verifica che l'interfaccia esponga un getter booleano denominato IsRunning
.
Questo test è stato probabilmente scritto prima che esistesse lo interface
e probabilmente molto prima che esistessero anche le classi concrete di IGame
. Immagino, se il progetto è di una certa maturità, ci sono altri test che esercitano le effettive implementazioni e verificano il comportamento per quel livello, e probabilmente usano il mocking nel contesto isolazionista più tradizionale piuttosto che lo stub delle forme teoriche.
Il valore di questo tipo di test è che obbliga a pensare a come una forma o un oggetto verrà utilizzato. Qualcosa sulla falsariga di "Non so esattamente cosa farà ancora un gioco, ma so che vorrò verificare se è in esecuzione ...". Quindi questo tipo di test è più per guidare le decisioni di progettazione, oltre che per validare il comportamento.
Non è il test più prezioso del pianeta, ma serve il suo scopo secondo me.
Modifica: Ero sul treno ieri sera mentre stavo scrivendo questo, ma volevo rispondere al commento di Andrew Whitaker direttamente nella risposta.
Si potrebbe sostenere che la firma nell'interfaccia stessa sia sufficiente per l'applicazione del contratto desiderato. Tuttavia, questo dipende in realtà da come trattate le vostre interfacce e in ultima analisi come convalidate il sistema che state provando a testare.
Potrebbe esserci un valore tangibile nel dichiarare esplicitamente questa funzionalità come test. Stai verificando esplicitamente che questa è una funzionalità desiderata per un IGame
.
Prendiamo un caso d'uso, diciamo che come designer sai che vuoi esporre un getter pubblico per IsRunning
, così lo aggiungi all'interfaccia.Ma diciamo che un altro sviluppatore ottiene questo e vede una proprietà, ma non vede alcun utilizzo di esso in nessun'altra parte del codice, si potrebbe presumere che sia idonea alla cancellazione (o alla rimozione del codice, che normalmente è una buona cosa) senza danno. L'esistenza di questo test, tuttavia, afferma esplicitamente che questa proprietà dovrebbe esistere.
Senza questo test, uno sviluppatore potrebbe modificare l'interfaccia, rilasciare l'implementazione e il progetto si compilerebbe ed eseguirà apparentemente correttamente. E sarebbe molto più tardi che qualcuno potrebbe notare che l'interfaccia è stata cambiata.
Con questo test, anche se sembra che nessuno lo stia utilizzando, la suite di test avrà esito negativo. La natura autodocumentante del test ti dice che ShouldReturnGameIsRunning()
, che per lo meno dovrebbe generare una conversazione se IGame
dovrebbe davvero esporre un getter IsRunning
.
solito resti non sono questo inutile. – sarnold
Hai due cose diverse in questa domanda: "Qual è lo scopo del TDD?" e "Qual è il punto di questo test?" - Fai attenzione a tenere separati i due nella tua testa. Il valore (o non) di TDD non può essere giudicato in modo equo da un singolo test (forse scarso). – Bevan
Vorrei poterlo chiudere come un duplicato di http://stackoverflow.com/questions/tagged/tdd?sort=votes&pagesize=50 –