Se moquant d'une dépendance sur un fichier de propriétés
Je suis en train d'écrire un test unitaire qui consiste à utiliser le code de legs. Problème est, de ce que je peux dire, l'héritage de code utilise une paire clé/valeur à partir d'un fichier de propriétés pour initialiser l'une de ses dernières privée statique membres, et je n'ai pas la moindre de l'endroit où cette propriété de fichier (de l'ensemble de l'application est assez énorme).
Donc, dans mon test, je veux faire quelque chose comme ceci (à l'aide Mockito):
LegacyClass legacyClass = mock(LegacyClass.class);
Je finis par obtenir un ExceptionInInitializationError
qui indique qu'il ne peut pas trouver une clé de propriété.
Dans LegacyClass.java, il y a:
private static final int LEGACY_PROPERTY =
Integer.parseInt(LegacyPropertyManager.getProp("legacy.property.key"));
Est-il un moyen d'écrire un test qui utilise cet héritage de la classe, même si la propriété de clé, il cherche n'existe pas? Peut-il se moque de lui en quelque sorte?
- Ajoutez votre propre fichier de propriétés pour le test unitaire comme here
- Mais le problème c'est que c'est l'héritage de la classe qui utilise la propriété - comment faire LegacyClass utiliser mon propre fichier de propriétés lors de l'instanciation à la place de celui examiné par LegacyPropertyManager?
- Astucieux en effet; mais je ne sais pas trop comment l'utiliser
mockStatic
pour se moquer degetProp
de sorte qu'il utilise mon fichier de propriétés. Dans mon unité de test, j'ai essayé moqueurLegacyPropertyManager
et puis en établissant unewhen(...).thenReturn(...)
comme dans l'exemple que vous avez associé, mais il semble que LegacyClass utilise toujours l'original. Y avait-il une étape supplémentaire que je dois faire? - La promotion d'une réponse à lui donner son propre thread.
Vous devez vous connecter pour publier un commentaire.
Vous ne pourriez pas aller très loin sans un savant de la bibliothèque comme PowerMock. Notez que votre LegacyClass.java initialise cette propriété statique finale de champ, ce qui signifie que l'initialiseur sera exécutée dès qu'il est chargé. PowerMock utilise plus profond de la magie (lire: manipulation de bytecode) pour vous permettre de se moquer de la statique
getProp
méthode que vous avez cité ci-dessus.Vous aurez besoin pour effectuer les opérations suivantes pour démarrer avec PowerMockito:
Remarque au niveau de la classe d'annotations, qui permettent respectivement pour PowerMock d'initialisation et d'inscrire la classe correcte pour la statique-niveau de moqueries.
getProp
. Avoir d'erreur. Dans eclipse recomndation il est demandé à fairegetProperties.
Mais des cas de test ne sont pas.Un exemple de se moquer d'un fichier de propriétés, en ignorant totalement où il serait le suivant. Vous pouvez créer votre propre ensemble de paires clé/valeur à droite dans la moqué de propriétés de l'objet.
L'obtention de cet objet pour être utilisé par héritage de la classe peut impliquer des modifications du code de l'héritage de classe, tels que l'évolution des propriétés privées de l'objet protégé ou la création d'un jeu de méthode.
Lorsqu'il est incapable d'améliorer le code héritage, je sais que vous pouvez vous aventurer dans le domaine de la partielle se moque/espions (Mockito 1.8) comme décrit dans le post suivant .. Mockito bypass statique méthode pour tester et son lien à Efficace Mockito. Je n'ai pas utilisé donc je ne peut pas offrir plus d'aide. Bonne chance.