Premessa: diciamo che il mio obiettivo è coprire tutte le mie classi con la copertura del test.
Nonostante l'opinione comune (specialmente nella comunità Java) di "non prestare troppa attenzione alla complessità ciclica (CC) e alla copertura del codice", penso davvero che queste informazioni siano estremamente utili: quando si ha un CC molto alto, o una zona scoperta nel tuo codice, molto probabilmente hai scritto un codice morto, o è un odore che hai problemi nel design. Nella mia esperienza personale posso dire che molti codici morti è odore di codice.
Questo problema diventa un po 'complicato quando si ha a che fare con il codice generato automaticamente, e questo è il punto, come posso affrontare facilmente i metodi hashcode
e equals
autogenerati?
Mi sono imbattuto in questa domanda in StackOverflow e ho realizzato un ottimo punto:
Ma questa domanda non è un duplicato perché voglio usare un approccio diverso:
Le migliori opzioni disponibili nelle risposte di quella domanda sono, per quanto posso vedere, EqualsBuilder di Apache Commons Lang o http://code.google.com/p/guava-libraries/ Guava. Entrambi usano il reflection (correggimi se sbaglio) e questo potrebbe essere un problema per le prestazioni in alcune situazioni.
Ma la mia domanda attuale è: poiché la maggior parte delle volte i metodi equals
e hashcode
sono non coperti, è un suggerimento che questa particolare classe fa non hanno bisogno di quei 2 metodi?
Poiché molti sviluppatori Java generano molto tempo uguali e codice hash anche quando non è necessario, cosa mi manca?
Non dovrebbe essere una soluzione migliore per generare quei metodi solo quando hai bisogno, ad esempio, di ordinare gli oggetti di quella classe, di usare quegli oggetti come una chiave di Hashtable e così via?
Come ho detto, penso che gli obiettivi di bassa complessità e alta copertura siano ammirevoli, ma la soluzione per utilizzare EqualsTester , mi sembra" Forza di coprire il codice che non è effettivamente necessario nel tuo programma ".