Comment puis-je test final et méthodes statiques d'un projet d'utilitaire?
Je suis en train de mettre en œuvre des tests unitaires pour unprojeter, il utilise un héritage de "l'utilité" du projet qui est jonché avec des méthodes statiques et beaucoup de classes sont définitives ou leurs méthodes sont finales. Je ne suis pas en mesure de mettre à jour le projet de patrimoine à tous.
JMock et EasyMock à la fois de vous étrangler en finale méthodes, et je ne vois pas une belle façon de tester la statique des appels. Quelles techniques sont là pour tester ces?
- Est-il une raison pourquoi vous devez utiliser un Simulacre de cadre?
- Oui, les appels de méthodes à utiliser JNDI propriétés pour se connecter à la base de données et de JMS, je ne veux pas mettre en œuvre toutes les pièces de mon test.
- Êtes-vous en mesure de revoir tout l'héritage de code pour vous aider?
- Non, mise à jour de la question afin de refléter que
Vous devez vous connecter pour publier un commentaire.
Si vous êtes en mesure de restructurer le code, vous pouvez envelopper vos appels à la finale/méthodes statiques dans de simples méthodes d'instance, par exemple:
Cela vous permet de remplacer votre méthode wrapper dans l'unité de test pour revenir à un simulacre d'instance de Foo.
Alternativement, vous pouvez utiliser Powermock, qui s'étend Easymock (et Mockito) pour permettre de se moquant de finale et méthodes statiques:
Voici un exemple test se moquant d'un static final de la méthode, l'exemple montre comment, à se moquer de certains autres types de trop:
Comment sur un niveau d'indirection /d'Injection de Dépendance?
Depuis l'héritage de l'utilitaire de projet est votre dépendance, de créer une interface pour le séparer de votre code. Maintenant réelle et la production de l'implémentation de cette interface délégués à l'héritage des méthodes d'utilitaire.
Pour vos tests, vous pouvez créer une maquette de cette interface et d'éviter d'interagir avec l'héritage de l'utilitaire de thingie.
JMockit permet de se moquer des méthodes statiques et final classes. Je suppose qu'il utilise certains classloadin-fu, bien que je n'ai pas vraiment regardé en elle.
Comme l'a déjà souligné, JMockit peut être utilisé.
Un exemple:
Si votre non-refactorable méthode utilise quelque chose comme JNDI pour se connecter à un autre service, j'avais envisager de commencer un JDNI service et de les remplir avec des talons qui vous contrôle. C'est une douleur, mais relativement simple. Il peut signifier la configuration d'une base de données ou JMS auditeur ou que ce soit, mais il devrait y avoir une légère mise en œuvre java vous pouvez vous déplacer dans les tests.
JMock avec JDave peut se moquer de finale de méthodes et de classes, si vous en avez besoin. Ici
sont des instructions. Cela étant dit, je voudrais traiter ce vieux code (comme d'autres l'ont déjà suggéré) comme une dépendance externe et de construire des interfaces et de se moquer de ceux. C'est une autre couche d'indirection, mais puisque vous ne pouvez pas modifier l'héritage le code, il semble être raisonnable.