Dans la plupart de mes applications, j'ai un objet "config" unique ou statique, chargé de lire divers paramètres à partir du disque. Presque toutes les classes l'utilisent à des fins diverses. Il s’agit essentiellement d’une table de hachage composée de paires nom / valeur. C'est en lecture seule, donc je ne m'inquiète pas trop du fait que j'ai un état tellement global. Mais maintenant que je commence à utiliser les tests unitaires, cela commence à devenir un problème.
Un problème est que vous ne voulez généralement pas tester avec la même configuration que celle que vous utilisez. Il y a deux solutions à cela:
- Attribuez à l'objet de configuration un paramètre à utiliser UNIQUEMENT à des fins de test afin que vous puissiez définir différents paramètres.
- Continuez à utiliser un seul objet de configuration, mais changez-le d'un singleton en une instance que vous transmettez partout où vous en avez besoin. Ensuite, vous pouvez le construire une fois dans votre application et une fois dans vos tests, avec des paramètres différents.
Mais dans les deux cas, il reste un deuxième problème: presque toutes les classes peuvent utiliser l’objet config. Ainsi, lors d'un test, vous devez configurer la configuration de la classe en cours de test, mais également TOUTES ses dépendances. Cela peut rendre votre code de test moche.
Je commence à en venir à la conclusion que ce type d'objet de configuration est une mauvaise idée. Qu'est-ce que tu penses? Quelles sont les alternatives? Et comment commencez-vous à refactoriser une application qui utilise la configuration partout?