Comment se moquer de méthode privée pour les essais à l'aide de PowerMock?
J'ai une classe qui je tiens à le tester avec une méthode publique qui appelle privée. Je tiens à supposer que la méthode fonctionne correctement. Par exemple, j'aimerais quelque chose comme doReturn....when...
. J'ai trouvé qu'il y est solution possible à l'aide de PowerMock, mais cette solution ne fonctionne pas pour moi.
Comment peut-Il être fait? Quelqu'un a ce problème?
- Une autre option est de faire de la méthode privée protégée et ajouter remplacer dans votre cas de test.
- En général, si vous avez besoin d'écraser une méthode privée vous avez un problème avec votre modèle d'objet - avez-vous envisagé un refactoring?
- Pourquoi? Si sa méthode appelle quelques ressources externes, comme un db, et il veut s'en moquer à injecter un faux résultat?
- Il devaient extraire le code pour accéder à la ressource externe dans une autre classe d'adaptateur. De cette façon, il peut facilement se moquer de la classe d'adaptateur et le sépare de la (des affaires) de la logique dans la classe testée à partir de détails techniques od accès à la ressource externe.
Vous devez vous connecter pour publier un commentaire.
Je ne vois pas le problème ici. Avec le code suivant à l'aide de la Mockito de l'API, j'ai réussi à faire exactement cela :
Et voici le test JUnit :
RuntimeException
et la@Expected(...)
sont juste une partie de l'exemple. Au cours des dernières années dans JUnit, j'ai trouvé quetry catch
est actuellement la meilleure chose à tester des qualités exceptionnelles, au moins jusqu'Java 7 (voir answer). Comme il peut être possible de l'améliorer avec Java 8 lambdas.Une solution générique qui fonctionne avec n'importe quel framework de test (si votre classe est non-
final
) est de créer manuellement votre propre maquette.Ce n'utilise pas de framework de sorte que son pas élégant, mais il le sera toujours: même sans PowerMock. Alternativement, vous pouvez utiliser Mockito de faire les étapes 2 & #3 pour vous, si vous avez fait l'étape n ° 1 déjà.
De se moquer d'une méthode privée directement, vous aurez besoin d'utiliser PowerMock comme indiqué dans le autre réponse.
je connais un moyen de ny qui vous pouvez vous appeler en privé, la fonction de test dans mockito
Pour une raison de Brice réponse n'est pas de travail pour moi. J'ai été en mesure de le manipuler un peu pour le faire fonctionner. C'est peut-être parce que j'ai une version plus récente de PowerMock. Je suis en utilisant 1.6.5.
La classe de test se présente comme suit: