Dans notre base de code Java, je continue de voir le modèle suivant:
/**
This is a stateless utility class
that groups useful foo-related operations, often with side effects.
*/
public class FooUtil {
public int foo(...) {...}
public void bar(...) {...}
}
/**
This class does applied foo-related things.
*/
class FooSomething {
int DoBusinessWithFoo(FooUtil fooUtil, ...) {
if (fooUtil.foo(...)) fooUtil.bar(...);
}
}
Ce qui me dérange, c'est que je dois passer une instance de FooUtilpartout, car les tests.
- Je ne peux pas rendre
FooUtilles méthodes de statique, car je ne pourrai pas les simuler pour tester les deuxFooUtilet ses classes clientes. - Je ne peux pas créer une instance de
FooUtilsur le lieu de consommation avec unnew, encore une fois parce que je ne pourrai pas m'en moquer pour les tests.
Je suppose que mon meilleur pari est d'utiliser l'injection (et je le fais), mais il ajoute son propre ensemble de tracas. En outre, la transmission de plusieurs instances util gonfle la taille des listes de paramètres de méthode.
Y a-t-il un moyen de mieux gérer cela que je ne vois pas?
Mise à jour: puisque les classes utilitaires sont sans état, je pourrais probablement ajouter un INSTANCEmembre singleton statique ou une getInstance()méthode statique , tout en conservant la possibilité de mettre à jour le champ statique sous-jacent de la classe pour le test. Ne semble pas super propre non plus.
FooUtilméthodes devraient être introduites FooSomething, peut-être qu'il y a des propriétés FooSomethingqui devraient être modifiées / étendues afin que les FooUtilméthodes ne soient plus nécessaires. Veuillez nous donner un exemple plus concret de ce qui FooSomethingpeut nous aider à fournir une bonne réponse à ces questions.