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 FooUtil
partout, car les tests.
- Je ne peux pas rendre
FooUtil
les méthodes de statique, car je ne pourrai pas les simuler pour tester les deuxFooUtil
et ses classes clientes. - Je ne peux pas créer une instance de
FooUtil
sur 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 INSTANCE
membre 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.
FooUtil
méthodes devraient être introduites FooSomething
, peut-être qu'il y a des propriétés FooSomething
qui devraient être modifiées / étendues afin que les FooUtil
méthodes ne soient plus nécessaires. Veuillez nous donner un exemple plus concret de ce qui FooSomething
peut nous aider à fournir une bonne réponse à ces questions.