Esistono applicazioni open source sviluppate utilizzando lo sviluppo basato su test che fungono da modelli di come dovrebbe funzionare un buon test unitario?
Preferirei vedere esempi in C # e .NET. (Nota che ho menzionato le applicazioni, non solo le librerie).
Sono un programmatore di medio livello che vuole davvero credere e praticare TDD. L'app su cui lavoro nel mio lavoro giornaliero è piuttosto complicata - circa 1 milione di righe di codice - e mi piacerebbe introdurre più test di unità. Abbiamo alcuni test unitari in atto, ma i miei sforzi per TDD e con il lavoro su codice già in fase di test non sono stati incoraggianti.
Nella mia esperienza dichiaratamente limitata, TDD sembra incoraggiare molta complessità in nome del disaccoppiamento. I bit dell'app che sono difficili da testare e che, per coincidenza, tendono a essere critici, vengono spinti verso la periferia, nel regno dei test di integrazione che potrebbero essere scritti o meno. (Sto pensando ai soliti sospetti qui, all'accesso al file system, all'idratazione di oggetti da un database, a chiamate web asincrone, ecc.)
Il codice sottoposto a test tende a coinvolgere molta collaborazione tra gli oggetti, e forse qualche semplice logica di flusso, tutto ciò che avviene in memoria e che potrebbe essere probabilmente scritto in un modo più semplice e comprensibile se tutto non dovesse essere completamente disaccoppiati per i test.
Capisco le tecniche per deridere le dipendenze e così via, ma nella mia esperienza l'uso massiccio di derisione porta a test molto fragili. Se il mio primo istinto nel vedere un gruppo di test diventare rosso è "Grande, ora devo sistemare tutti i mock", quindi i miei test sono diventati una resistenza piuttosto che una rete di sicurezza.
Sto cercando di superare questa barriera mentale e, come parte di ciò, sto leggendo il libro di Michael Feathers, Lavorare efficacemente con il codice legacy . Spero di mostrarmi un po 'di quello che mi manca.
Mi piacerebbe anche studiare alcune applicazioni .NET non banali con una buona copertura del codice, forse un sistema di gestione dei contenuti o un'applicazione CRUD. Il framework di testing di FitNesse di cui parla Uncle Bob è qualcosa che probabilmente guarderò, ma sarebbe bello vedere qualcosa scritto nella lingua con cui ho più familiarità.
Sarebbe gradito qualsiasi suggerimento o parola di saggezza.