Mi piace molto la risposta di @ RevBingo perché suggerisce che la lotta per il 100% può farti ripulire o eliminare il codice inutilizzato. Quello che non ho visto nelle altre risposte è la sensazione di quando hai bisogno di una copertura elevata e quando non lo fai. Ho preso una pugnalata all'inizio. Penso che aggiungere dettagli a un grafico come questo sarebbe una ricerca più utile che trovare un numero di copertura del test che fosse giusto per tutto il codice.
100%
Per un'API pubblica, come le raccolte java.util, che non è accoppiata a un database e non restituisce HTML, penso che la copertura del 100% sia un nobile obiettivo iniziale, anche se ti accontenti del 90-95% a causa del tempo o altro vincoli. L'aumento della copertura dei test dopo aver completato le funzionalità impone un livello di controllo più dettagliato rispetto ad altri tipi di revisione del codice. Se la tua API è popolare, le persone la useranno, la sottoclasseranno, la deserializzeranno, ecc. In modi che non puoi aspettarti. Non vuoi che la loro prima esperienza sia trovare un bug o supervisione del design!
90%
Per il codice di infrastruttura aziendale, che include strutture di dati e restituisce strutture di dati, il 100% è probabilmente ancora un buon obiettivo iniziale, ma se questo codice non è abbastanza pubblico da invitare molti abusi, forse l'85% è ancora accettabile?
75%
Per il codice che accetta e restituisce stringhe, penso che i test unitari siano molto più fragili, ma possano comunque essere utili in molte situazioni.
50% o meno
Odio scrivere test per funzioni che restituiscono HTML perché è così fragile. Che cosa succede se qualcuno modifica CSS, JavaScript o l'intero blocco di HTML e inglese che restituisci non ha senso per gli utenti finali umani? Se riesci a trovare una funzione che utilizza molta logica di business per produrre un po 'di HTML, vale la pena testarlo. Ma la situazione inversa potrebbe non valere la pena testare affatto.
Vicino allo 0%
Per alcuni codici, la definizione di "corretto" è "ha senso per l'utente finale". Esistono test non tradizionali che puoi eseguire su questo codice come il controllo grammaticale automatico o HTML che convalida l'output. Ho anche impostato dichiarazioni grep per piccole incongruenze di cui comunemente cadiamo in preda al lavoro, come dire "Login" quando il resto del sistema lo chiama "Accedi". Quest'uomo non è rigorosamente un test unitario, ma un modo utile per rilevare i problemi senza aspettarsi risultati specifici.
Alla fine, però, solo un essere umano può giudicare ciò che è sensibile agli umani. I test unitari non possono aiutarti. A volte ci vogliono diversi umani per giudicarlo accuratamente.
Assoluto 0%
Questa è una categoria triste e mi sento meno una persona per scriverla. Ma in qualsiasi progetto sufficientemente ampio ci sono buchi di coniglio che possono succhiare persone settimane di tempo senza fornire alcun vantaggio commerciale.
Ho comprato un libro perché sosteneva di mostrare come deridere automaticamente i dati per i test di Hibernate. Ma ha testato solo le query Hibernate HQL e SQL. Se devi fare molto HQL e SQL, non stai davvero ottenendo il vantaggio di Hibernate. Esiste una forma di database in-memory di Hibernate, ma non ho investito il tempo per capire come usarlo efficacemente nei test. Se lo avessi eseguito, vorrei avere una copertura dei test elevata (50% -100%) per qualsiasi logica aziendale che calcola le cose navigando in un grafico a oggetti che causa l'esecuzione di alcune query da parte di Hibernate. La mia capacità di testare questo codice è quasi allo 0% in questo momento e questo è un problema. Quindi, migliora la copertura dei test in altre aree del progetto e provo a preferire funzioni pure rispetto a quelle che accedono al database, soprattutto perché è più semplice scrivere test per quelle funzioni. Ancora,