Question

J'ai dans mon code une méthode statique que j'aimerais en quelque sorte se moquer.

J'utilise jmock.

Une des façons de faire est d’avoir " classe de wrapper " autour de la méthode statique et je m'en moque, mais j'espérais une meilleure solution.

Je vais à ce sujet dans le mauvais sens?

RÉTROACTION:

J'allais avoir une interface et une classe qui avait une méthode qui vient d'appeler la méthode statique. Cela me permettrait de me moquer de la logique en se moquant simplement de l'appel de cette classe de wrapper. (Je me sens sale même en parle :))

Était-ce utile?

La solution

Nous ne prenons pas en charge le moquage de méthodes statiques dans jMock car cela ne correspond pas à notre approche de conception. Nous préférons ne pas utiliser de méthodes statiques pour les fonctionnalités significatives pouvant affecter l'état du système. Nous avons tendance à les utiliser uniquement pour prendre en charge le code OO et le rendre plus lisible. C'est pourquoi nous considérons le fait de se moquer d'une méthode statique comme un indice qu'il y a un problème. Une exception est celle qui se trouve dans une bibliothèque tierce, mais nous le ferions probablement dans un contexte plus orienté objet.

Autres conseils

JMockit est une autre boîte à outils permettant de se moquer des méthodes statiques (ainsi que des méthodes finales, constructeurs, etc.).

Je ne vois aucun problème avec l'utilisation judicieuse de méthodes statiques lors de la conception d'une solution sinon OO.

Par exemple, un des motifs que je préfère utiliser est la façade statique , en particulier pour fournir une API plus simple et plus facile à utiliser pour le sous-système de persistance dans une application métier. À mon avis, aucune autre solution n’est aussi élégante que quelque chose comme:


    List<Person> peopleAboveAge = 
        find("select p from Person p where p.age >= ?", age);

où la méthode find est importée de manière statique à partir d'une classe PersistenceFacade qui définit uniquement les méthodes statiques et encapsule comment obtenir l'instance appropriée de Session / EntityManager. Cette solution est conviviale et flexible pour les tests unitaires. Je l'ai utilisé dans une application métier qui comptait plus de 500 entités persistantes, utilisant Hibernate. La façade statique nous a été utile lors de la migration d'Hibernate 2 vers Hibernate 3, lorsque nous avons migré d'Oracle vers Sybase, puis de nouveau vers Oracle, et lorsque nous avons commencé à utiliser des annotations JPA au lieu de "hbm.xml". fichiers pour le mappage ORM.

Powermock est une extension de EasyMock qui permet de se moquer des méthodes statiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top