Un tema ricorrente che mi sono imbattuto nella mia carriera è quello di essere il nuovo sviluppatore ad arrivare in un team e avere rapidamente una diffidenza nei confronti dell'unità esistente e delle suite di test di integrazione.
Durante il colloquio ti viene detto dal management che "supportano fortemente i test unitari" e che lo incoraggiano apertamente. Lo fanno, ma tutto ciò che riguarda i test stessi è semplicemente sbagliato. Come il fatto che stiano reclamando una copertura del 100% quando c'è una copertura del test di integrazione del 100% ma una copertura del test unitario ripetibile inferiore al 10%. Alcuni altri problemi che ho riscontrato:
Nessuna chiara indicazione tra cos'è un test unitario e cosa è un test di integrazione. I test unitari e di integrazione sono mescolati insieme nella stessa classe.
Test di integrazione che hanno dichiarato esplicite dipendenze su dati dinamici molto specifici su un database di un ambiente specifico.
Test di integrazione non transazionale, fondamentalmente test che possono o meno preoccuparsi di ripulire dopo se stessi, a volte richiedono "scrubbing" manuale del database per rendere ripetibile il test.
Nessun beffardo di sorta, e il codice dell'applicazione richiede una profonda revisione solo per renderlo possibile. In altre parole, progettare senza pensare.
Nessuna convenzione di denominazione chiara per esaminare rapidamente un nome di test e determinare approssimativamente quali test vengono eseguiti.
Tutto ciò non vuol dire che TUTTI i test sono inutili o cattivi, molti di loro sono piuttosto buoni e vale la pena conservarli, ma a volte è come cercare l'oro. Eviterei di proposito di eseguire i test solo perché avevo paura di rovinare il database per i miei casi di test black-box.
Questo mi ha essenzialmente dato una diffidenza intrinseca nei test unitari e di integrazione che non ho scritto o rivisto personalmente in alcun modo. Ad un certo livello se non si ha fiducia nella qualità della propria suite di test, questo non apporta davvero alcun valore al team o al progetto.
Cosa fai quando ti trovi in questa situazione? Quale pensi che sarebbe il miglior piano di attacco per affrontare qualcosa del genere?
Tutti i test dovrebbero essere rifattorizzati in uno sforzo monumentale che attraversa le versioni? Dovresti semplicemente abbandonare l'idea che questo progetto legacy possa avere una solida copertura di test unitari un giorno?