En la mayoría de mis aplicaciones, tengo un objeto "config" singleton o estático, a cargo de leer varias configuraciones del disco. Casi todas las clases lo usan, para varios propósitos. Esencialmente es solo una tabla hash de pares de nombre / valor. Es de solo lectura, así que no me ha preocupado demasiado el hecho de que tengo tanto estado global. Pero ahora que estoy comenzando con las pruebas unitarias, está empezando a convertirse en un problema.
Un problema es que generalmente no desea probar con la misma configuración con la que se ejecuta. Hay un par de soluciones para esto:
- Dele al objeto de configuración un setter que SOLO se usa para pruebas, para que pueda pasar en diferentes configuraciones.
- Continúe usando un único objeto de configuración, pero cámbielo de un singleton a una instancia que pase por todas partes donde sea necesario. Luego puede construirlo una vez en su aplicación, y una vez en sus pruebas, con diferentes configuraciones.
Pero de cualquier manera, todavía te queda un segundo problema: casi cualquier clase puede usar el objeto de configuración. Entonces, en una prueba, debe configurar la configuración para la clase que se está probando, pero también TODAS sus dependencias. Esto puede hacer que su código de prueba sea feo.
Estoy empezando a llegar a la conclusión de que este tipo de objeto de configuración es una mala idea. ¿Qué piensas? ¿Cuáles son algunas alternativas? ¿Y cómo comienzas a refactorizar una aplicación que usa la configuración en todas partes?