Nous essayons de concevoir notre système de manière à ce qu'il puisse être testé et, dans la plupart des cas, développé à l'aide de TDD. Nous essayons actuellement de résoudre le problème suivant:
À divers endroits, il est nécessaire d’utiliser des méthodes d’assistance statiques telles que ImageIO et URLEncoder (les deux API standard) ainsi que diverses autres bibliothèques composées principalement de méthodes statiques (comme les bibliothèques Apache Commons). Mais il est extrêmement difficile de tester les méthodes qui utilisent de telles classes d'assistance statique.
J'ai plusieurs idées pour résoudre ce problème:
- Utilisez un framework fictif pouvant simuler des classes statiques (comme PowerMock). C'est peut-être la solution la plus simple mais cela donne l'impression d'abandonner.
- Créez des classes wrapper instanciables autour de tous ces utilitaires statiques pour pouvoir les injecter dans les classes qui les utilisent. Cela semble être une solution relativement propre, mais je crains que nous ne finissions par créer énormément de ces classes de wrapper.
- Extrayez chaque appel de ces classes auxiliaires statiques dans une fonction pouvant être remplacée et testez une sous-classe de la classe que je souhaite tester.
Mais je continue de penser que cela doit être un problème auquel de nombreuses personnes doivent faire face lors de la TDD - il doit donc déjà y avoir des solutions à ce problème.
Quelle est la meilleure stratégie pour garder les classes qui utilisent ces aides statiques testables?