La réinitialisation des simulations dans Mockito est une fonctionnalité qui vous permet de réutiliser des objets simulés en effaçant leurs bousculades et leurs interactions. Cependant, l'utilisation de `réinitialiser () 'est généralement découragée sauf si nécessaire, car elle peut indiquer des tests mal structurés. Voici quelques meilleures pratiques pour réinitialiser les simulations dans Mockito:
Comprendre quand utiliser `reset () '
- Évitez d'utiliser `reset () ': La principale raison pour laquelle« réinitialiser () »existe est de prendre en charge les simulations injectées par conteneurs, telles que celles utilisées dans le code hérité ou les interfaces tierces. Dans la plupart des cas, en particulier avec le code de test bien conçu, vous devez éviter d'utiliser `réinitialiser () 'et concentrer plutôt sur la création de petites méthodes de test ciblées [2] [4].
- Odeur de code: si vous avez besoin d'utiliser `reset () 'dans une méthode de test, cela pourrait être un signe que vos tests sont trop complexes ou couvrent trop de scénarios. Cela pourrait indiquer une nécessité de refactoriser vos tests ou le code testé [2].
Alternatives à `reset () '
- Créer de nouvelles simulations: au lieu de réinitialiser les maquettes, envisagez de créer de nouvelles instances de simulation pour chaque méthode de test. Cette approche garantit que chaque test commence par une ardoise propre, réduisant le risque d'interactions à partir de tests précédents affectant celui actuel [4].
- Utilisez `ClearInvocations ()`: Si vous n'avez besoin que de dégager l'historique d'invocation (par exemple, pour vérifier les interactions sans affecter le coup), utilisez `mockito.clearinvocations () '. Cette méthode supprime l'historique d'invocation sans réinitialiser les talons, qui peuvent être utiles dans certains scénarios [4].
meilleures pratiques pour réinitialiser les simulations
- Réinitialisez après chaque test: Si vous devez réinitialiser les maquettes, faites-le après chaque méthode de test en utilisant une annotation `@ après` dans Junit ou` AfterEach () 'dans Scalatest. Cela garantit que chaque test commence par un état de simulation propre [3] [10].
- Évitez de réinitialiser avant les tests: réinitialiser les simulations avant que chaque test ne puisse entraîner une confusion sur l'état de la maquette au début du test. Il est généralement plus clair de créer de nouvelles simulations ou de réinitialiser après les tests [10].
- Utilisez des fonctionnalités de framework: dans des cadres comme le printemps, en utilisant des annotations comme `@ Mockbean` peut gérer automatiquement la réinitialisation de la simulation après chaque test, éliminant le besoin de réinitialisation manuelle [10].
Conclusion
Alors que Mockito fournit la méthode `` reset () 'pour des cas d'utilisation spécifiques, il est généralement conseillé d'éviter son utilisation en faveur de la conception de test plus propre et plus ciblée. En créant de nouvelles simulations pour chaque test ou en utilisant des fonctionnalités de framework pour gérer l'état simulé, vous pouvez assurer des tests robustes et maintenables sans avoir besoin de réinitialités manuelles.
Citations:[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://site.mockito.org/javadoc/current/org/mockito/mockito.html
[3] https://twitter.github.io/finatra/user-guide/testing/mocks.html
[4] https://softwareensineering.stackexchange.com/questions/188299/is-this-an-approad-use-of-mackitos-reset-method
[5] https://github.com/mockito/mockito-kotlin/issues/513
[6] https://symflower.com/en/company/blog/2024/how-to-do-moking-spring-boot/
[7] https://www.lambdatest.com/automation-tetsting-advisor/selenium/methods/org.mockito.mockito.reset
[8] https://github.com/mockito/mockito/issues/183
[9] https://www.toptal.com/java/a-guide-to-everyday-mockito
[10] https://stackoverflow.com/questions/18164123/how-to-plean-f--mocks-in-spring-stests- when-using-mockito