C'est une excellente question! Je pense que la cause première est la suivante, nous utilisons JUnit non seulement pour les tests unitaires. La question devrait donc être divisée:
- Dois-je utiliser Mockito.verify () dans mes tests d' intégration (ou tout autre test supérieur à l'unité)?
- Dois-je utiliser Mockito.verify () dans mes tests unitaires de boîte noire ?
- Dois-je utiliser Mockito.verify () dans mes tests unitaires en boîte blanche ?
Donc, si nous ignorons les tests supérieurs à l'unité, la question peut être reformulée "L' utilisation de tests unitaires en boîte blanche avec Mockito.verify () crée un grand couple entre le test unitaire et mon implémentation pourrait, puis-je en faire " une boîte grise msgstr " tests unitaires et règles générales à utiliser pour cela ".
Passons maintenant en revue toutes ces étapes.
* - Dois-je utiliser Mockito.verify () dans mes tests d' intégration (ou tout autre test supérieur à l'unité)? * Je pense que la réponse est clairement non, de plus vous ne devriez pas utiliser de maquette pour cela. Votre test doit être aussi proche que possible de l'application réelle. Vous testez un cas d'utilisation complet, pas une partie isolée de l'application.
* tests unitaires boîte noire vs boîte blanche * Si vous utilisez l' approche boîte noire , que faites-vous réellement, vous fournissez une entrée (toutes les classes d'équivalence), un état et des tests qui vous permettront d'obtenir la sortie attendue. Dans cette approche, l'utilisation de simulacres en général est justifiée (vous imitez simplement qu'ils font la bonne chose; vous ne voulez pas les tester), mais appeler Mockito.verify () est superflu.
Si vous utilisez l' approche en boîte blanche de ce que vous faites réellement, vous testez le comportement de votre unité. Dans cette approche, appeler Mockito.verify () est essentiel, vous devez vérifier que votre unité se comporte comme prévu.
règles générales pour les tests en boîte grise
Le problème avec les tests en boîte blanche est qu'il crée un couplage élevé. Une solution possible est de faire des tests en boîte grise, pas des tests en boîte blanche. Il s'agit en quelque sorte d'une combinaison de tests en boîte noire et blanche. Vous testez vraiment le comportement de votre unité comme dans les tests en boîte blanche, mais en général vous le rendez indépendant de l'implémentation lorsque cela est possible . Lorsque cela est possible, vous effectuerez simplement une vérification comme dans le cas de la boîte noire, affirmant simplement que la sortie est ce que vous attendez. Donc, l'essence de votre question est de savoir quand c'est possible.
C'est vraiment difficile. Je n'ai pas de bon exemple, mais je peux vous donner des exemples. Dans le cas mentionné ci-dessus avec equals () vs equalsIgnoreCase (), vous ne devez pas appeler Mockito.verify (), il suffit d'affirmer la sortie. Si vous ne pouvez pas le faire, décomposez votre code en une unité plus petite, jusqu'à ce que vous puissiez le faire. D'un autre côté, supposons que vous ayez un @Service et que vous écrivez @ Web-Service qui est essentiellement un wrapper sur votre @Service - il délègue tous les appels au @Service (et fait une gestion supplémentaire des erreurs). Dans ce cas, appeler à Mockito.verify () est essentiel, vous ne devez pas dupliquer toutes vos vérifications que vous avez faites pour @Serive, vérifier que vous appelez à @Service avec la liste de paramètres correcte est suffisant.