Sto lavorando su un progetto che ha un sacco di codice legacy che non è coperto da test.Integrazione continua: assicurarsi che i nuovi commit siano coperti con i test
Esiste un modo per configurare il server di integrazione per verificare che tutti i nuovi commit abbiano una quantità minima di test (ad esempio, la copertura è> 70%)?
In sostanza, vedo due opzioni:
- In qualche modo configurare il server CI di fallire la compilazione quando cambia impegnati non sono coperti con test di unità. Ciò garantirà che ogni parte del nuovo codice abbia dei test e che i test per il codice legacy aumenteranno ad ogni cambio.
- Impostare una soglia di copertura per l'intero progetto e fallire la costruzione se la percentuale di copertura diminuisce dopo un commit. Il problema con questo è che se cancello una classe contenente 100 istruzioni e aggiungo una nuova classe con 50 istruzioni la percentuale di copertura salirà senza che io scriva alcun test.
Mi piace l'opzione 1 altro perché impone che le modifiche nel codice legacy vengano sottoposte a test dell'unità. Ciò dovrebbe aumentare la copertura complessiva del test.
In questo momento stiamo utilizzando Jenkins come nostro server CI e JaCoCo per la copertura di test. Maven è usato per la costruzione del progetto e SVN è il nostro principale controllo del codice sorgente.
Tenere presente che una copertura del 100% non è necessariamente possibile o addirittura desiderata. Anche i numeri di copertura possono essere manipolati; scrivere un test unitario per una classe di test può gonfiare artificialmente la copertura del test. –
@ MikeRylander Lo so, non sogna nemmeno una copertura al 100% su questo progetto. Ma continuo a pensare che forzare nuove modifiche per avere almeno una certa copertura sia buona. –
Attualmente sto lavorando a una soluzione a questo problema che si rivolge in gran parte al commento di @MikeRylanders. http://pitest.org è ora integrato con il controllo della versione. La prossima versione consentirà l'analisi dei file in base allo stato scm. La seguente versione consentirà l'analisi per intervallo di date o commit, che consentirebbe a un server di generazione di verificare che il codice modificato abbia soddisfatto un determinato punteggio di mutazione. – henry