Esistono applicazioni open source sviluppate utilizzando lo sviluppo test driven 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 livello intermedio che vuole davvero credere e praticare TDD. L'app su cui lavoro nel mio lavoro quotidiano è piuttosto complicata - circa 1 milione di righe di codice - e mi piacerebbe introdurre più test unitari. Abbiamo in atto alcuni test unitari, ma i miei sforzi in TDD e nel lavorare su un 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 ad essere critici, vengono spinti verso la periferia, nel regno dei test di integrazione che possono o non possono mai essere scritti. (Sto pensando ai soliti sospetti qui, accesso al file system, idratazione di oggetti da un database, chiamate web asincrone, ecc.)
Il codice sotto test tende a coinvolgere molta collaborazione tra gli oggetti, e forse qualche semplice logica di flusso, tutto ciò che accade in memoria e che potrebbe essere probabilmente scritto in un modo più semplice e comprensibile se tutto non dovesse essere completamente disaccoppiato per i test.
Comprendo le tecniche per deridere le dipendenze e simili, ma nella mia esperienza un uso intenso del deridere porta a test molto fragili. Se il mio primo istinto nel vedere una serie di test diventare rosso è "Fantastico, ora devo sistemare tutte le beffe", allora i miei test sono diventati una resistenza piuttosto che una rete di sicurezza.
Sto cercando di superare questa barriera mentale, e come parte di questo sto leggendo il libro di Michael Feathers, Lavorare efficacemente con il codice legacy . Spero che mi mostri qualcosa di ciò 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'app CRUD. Il framework di test FitNesse di cui parla zio Bob è qualcosa che probabilmente guarderò, ma sarebbe bello vedere qualcosa scritto nella lingua con cui ho più familiarità.
Eventuali suggerimenti o parole di saggezza sarebbero apprezzati.