Estoy trabajando para hacer que mis clases sean comprobables por unidad, usando la inyección de dependencia. Pero algunas de estas clases tienen muchos clientes, y aún no estoy listo para refactorizarlos para comenzar a pasar las dependencias. Entonces estoy tratando de hacerlo gradualmente; manteniendo las dependencias predeterminadas por ahora, pero permitiendo que se anulen para la prueba.
Un enfoque que estoy planteando es simplemente mover todas las llamadas "nuevas" a sus propios métodos, por ejemplo:
public MyObject createMyObject(args) {
return new MyObject(args);
}
Luego, en mis pruebas unitarias, puedo subclasificar esta clase y anular las funciones de creación, para que creen objetos falsos.
¿Es este un buen enfoque? ¿Hay alguna desventaja?
En términos más generales, ¿está bien tener dependencias codificadas, siempre que pueda reemplazarlas para realizar pruebas? Sé que el enfoque preferido es exigirlos explícitamente en el constructor, y me gustaría llegar allí eventualmente. Pero me pregunto si este es un buen primer paso.
Una desventaja que se me acaba de ocurrir: si tiene subclases reales que necesita probar, no puede reutilizar la subclase de prueba que escribió para la clase principal. Tendrá que crear una subclase de prueba para cada subclase real, y tendrá que anular las mismas funciones de creación.