Sono nuovo di TDD e relativamente nuovo allo sviluppo di software in generale (ad es. 4 anni di esperienza), ma sto cercando di imparare.
Ho giocato con TDD ma mi sono imbattuto in quello che so realizzare è un problema comune. Ho testato sia i contratti API di livello superiore, a volte con test di integrazione quando necessario, sia i test di unità dipendenti dall'implementazione di livello inferiore.
Di recente ho visto un colloquio di Ian Cooper che suggerisce che non dovremmo testare gli interni, solo ciò che è inteso effettiva funzionalità del programma (ad esempio, qualunque sia il contratto del programma). Nota che sto parafrasando qui, e potrebbe aver perso il messaggio.
Per me è logico che sarebbe utile permettere il refactoring senza preoccuparsi di test che rompono gli interni, ma allo stesso tempo sembra strano non testare molte delle funzioni interne (private o non) che scrivo per aiutami a raggiungere la più grande funzionalità a portata di mano. Inoltre, a volte se provo a scrivere test che testano solo a un livello di contratto elevato, i test diventano troppo grandi / complessi.
Inoltre, questo non contraddice la spinta principale per tonnellate di test unitari e che, in generale, più unità testano meglio perché ci aiutano a identificare il problema specifico quando falliscono piuttosto che essere omnibus?
Come faccio a bilanciarlo? È solo un atto di equilibrio che imparerò nel tempo attraverso l'esperienza?