Nel nostro gruppo di prodotti il nostro obiettivo è una copertura del 50-70% del codice rispetto ai test unitari e una copertura del 90% + dai test unitari e dall'automazione dei test messi insieme. Il tempo tipico previsto per la scrittura dei test unitari è di circa 1 giorno per ogni funzione che richiede 3-4 giorni di codifica con la testa in giù. Ma questo può variare con molti fattori.
La copertura del codice del 99% è eccezionale. I test unitari sono fantastici. Ma la copertura del codice del 99% dal solo test unitario? Trovo così difficile credere che tu possa ottenere tutta questa copertura dai test delle unità da solo.
Per il caso in cui hai trascorso 3 giorni a scrivere test per una classe che altrimenti richiedeva un giorno di implementazione. Non hai elaborato il motivo per cui ci è voluto tanto tempo o condividere un codice. Dalla speculazione, immagino che non stavi davvero scrivendo un vero test unitario per la tua classe, ma in realtà stavi scrivendo automazione dei test . E in realtà non c'è niente di sbagliato in questo - purché tu riconosca la differenza tra i due diversi tipi di test.
Ma hai detto che i tre giorni di test di scrittura erano solo per una singola classe. Forse la classe stessa non è stata progettata per i test unitari. La classe implementa l'interfaccia utente? Networking? File I / O? In tal caso, è possibile che si sia finito a scrivere più codice per testare il runtime Java rispetto alla logica aziendale che interagisce con il runtime.
TDD ti fa pensare in termini di interfacce e interfacce alle dipendenze. Quella singola classe che implementa UI, networking e file / io per una singola funzione potrebbe essere meglio divisa in più classi: una per il networking, una per il file / io e l'interfaccia utente interrotta in una progettazione modello-visualizzatore-controller. Quindi è possibile implementare test appropriati per ciascuno con semplici oggetti mock per le dipendenze. Naturalmente, tutto questo richiede più tempo. Quindi, piuttosto che 1 giorno per il codice e 3 giorni per scrivere i test, questo tipo di progettazione potrebbe richiedere 3 giorni di codice e 1 giorno di test di scrittura. Ma il codice sarà molto più gestibile e riutilizzabile.