Mi equipo de desarrollo ha comenzado a utilizar Mockito y tiene clases que se han definido como 'final'. He leído en Java efectivo por Joshua Bloch y en el hilo SO When to use final que todas las clases deben usar el modificador final. Ha habido algún desacuerdo en el hilo, pero estoy de acuerdo con la idea de forzar la composición de la clase a menos que la herencia tenga sentido.Qué hacer cuando las prácticas recomendadas de Java entran en conflicto con Mockito
¿Qué debo hacer cuando quiero probar clases usando un marco de prueba como Mockito que requiere que las clases no tengan el modificador "final"? Espero que alguien más haya tenido problemas similares durante su desarrollo. ¿A qué resoluciones llegó su equipo de desarrollo?
Hay dos respuestas obvias como usar JMock o eliminar el modificador 'final' en las clases que queremos probar, pero queremos seguir con un marco de prueba externo (además de JUnit) y puede ser difícil convencer a otros desarrolladores para eliminar el modificador 'final'.
Gracias.
Hacer todas las * clases * 'final' ciertamente no es una buena práctica ... ha pasado un tiempo desde la lectura de Java efectivo, pero el consenso del hilo vinculado ciertamente tampoco parece implicar eso. Debe marcar las clases 'final' para indicar que hay alguna razón por la que no deberían extenderse, si no hay motivo, simplemente agrega una complejidad innecesaria, como ha descubierto. Además, si se da cuenta de que necesita extender la clase en algún momento, tiene que cambiar el código de la clase original para escribir la nueva clase, violando el principio Abierto/Cerrado. – Nate