La mayoría de las aplicaciones requerirán alguna configuración externa; puede ocultar esto haciéndolo dependiente de variables mágicas, o guardándolo en alguna ubicación interna, pero eso no eliminará la necesidad. El objetivo es reconocer lo que debería ser externo y lo que puede ser interno. Solo se pueden probar las partes internas.
Una aplicación no debe confiar en que un archivo de configuración externo sea correcto. Debe verificar la corrección e informar errores. Si no es posible que la aplicación verifique el archivo de configuración, probablemente esté haciendo demasiado con él. Si el archivo de configuración cambia el comportamiento de la aplicación, no debería ser externo en mi opinión.
Por ejemplo, la aplicación puede verificar fácilmente un nombre de usuario / contraseña de la base de datos al intentar conectarse a la base de datos. Si esto falla, puede informarlo, y obviamente no es un error en el código de la aplicación. Del mismo modo, para una ruta de archivo se pueden verificar los derechos de existencia y acceso.
Ahora, si tuviera que poner consultas SQL en el archivo de configuración, entonces la aplicación no puede verificar fácilmente la exactitud de esas consultas. Lo mismo ocurre con un archivo de especificación de inyección de dependencia completa (a la Java-Spring XML). Esos no deberían estar en archivos de configuración externos.
Pero si la configuración especificada describe algo externo, y puede verificar rápidamente su corrección, no creo que haya ningún problema con los archivos de configuración externos.
Editar: también asegúrese de que sus informes de error muestren qué archivo de configuración se utiliza. Nada es más frustrante que descubrir que estaba buscando el archivo incorrecto después de horas de tratar de averiguar qué le pasa.