Il mio team di sviluppo ha iniziato a utilizzare Mockito e ha classi definite come "final". Ho letto in Java efficace di Joshua Bloch e nel thread SO When to use final che tutte le classi dovrebbero utilizzare il modificatore finale. Ci sono stati alcuni disaccordi nella discussione, ma sono d'accordo con l'idea di forzare la composizione della classe a meno che l'eredità abbia un senso.Cosa fare quando Java Best Practices è in conflitto con Mockito
Cosa devo fare quando voglio testare le classi utilizzando un framework di test come Mockito che richiede alle classi di non avere il modificatore 'finale'? Spero che qualcun altro abbia riscontrato problemi simili durante il loro sviluppo. Su quali risoluzioni è arrivato il tuo team di sviluppo?
Ci sono due risposte ovvie come usare JMock o rimuovere il modificatore 'finale' sulle classi che vogliamo testare, ma vogliamo restare con un framework di test esterno (oltre a JUnit) e potrebbe essere difficile convincere altri sviluppatori per rimuovere il modificatore 'finale'.
Grazie.
Fare tutte le * classi * 'final' di certo non è una buona pratica ... è passato un po 'di tempo dall'ultima lettura di Effective Java, ma il consenso del thread collegato non sembra implicare che sia. Dovresti contrassegnare le classi 'final' per indicare che c'è qualche ragione per cui non dovrebbero essere estese - se non c'è motivo, aggiunge solo la complessità non necessaria - come hai trovato. Inoltre, se ti rendi conto che hai bisogno di estendere la classe da qualche parte lungo la strada, devi cambiare il codice della classe originale per scrivere la nuova classe - violando il principio Aperto/Chiuso. – Nate