Whitebox de PowerMock et Whitebox de Mockito sont tous deux des classes d'utilité utilisées pour accéder et manipuler les états internes de classes, mais ils ont des différences distinctes dans leurs origines, leurs fonctionnalités et leurs contextes d'utilisation.
Origine et disponibilité
- Whitebox de Mockito: il s'agissait d'une classe interne dans Mockito qui a permis aux utilisateurs de définir des états internes d'objets. Cependant, il a été supprimé de Mockito 2.x en raison de préoccupations concernant la promotion de mauvaises pratiques de test et parce qu'elle n'était pas destinée à un usage public [11]. Les utilisateurs qui se sont appuyés sur cela ont été encouragés à passer à des alternatives comme Whitebox de PowerMock ou à implémenter leurs propres utilitaires de réflexion [3].
- Whitebox de PowerMock: Cela fait partie de la bibliothèque PowerMock, qui étend les capacités de Mockito en permettant la moquerie des méthodes privées, statiques et finales, entre autres fonctionnalités [5]. Whitebox de PowerMock fournit un utilitaire de réflexion simplifié destiné aux tests, permettant l'accès aux membres privés et l'invocation des méthodes privées [2] [6].
Fonctionnalité ##
- Whitebox de Mockito (historique): Avant sa suppression, Whitebox de Mockito a permis aux utilisateurs de définir des états internes d'objets en utilisant des méthodes comme `SetInternalState`. Cela a été utile pour injecter des simulations dans les classes sans setters publics.
- Whitebox de PowerMock: offre un ensemble plus large de fonctionnalités, notamment:
- Accès aux membres privés: des méthodes comme «GetInternalState» permettent de récupérer les valeurs de champ privé.
- Invoquer des méthodes privées: la méthode `invokemethod» peut appeler des méthodes privées, y compris les méthodes statiques [4] [10].
- Définition des champs privés: Bien qu'il ne soit pas explicitement documenté, Whitebox de PowerMock peut être utilisé pour définir des champs privés via la réflexion, bien que ce ne soit pas son objectif principal.
Contexte d'utilisation
- Whitebox de Mockito: Comme il n'est plus disponible dans Mockito 2.x, les utilisateurs sont invités à utiliser des alternatives telles que Whitebox de PowerMock ou `ReflectionTesttutils 'de Spring, le cas échéant [1] [3].
- Whitebox de PowerMock: généralement utilisé dans des scénarios où un accès direct à des membres privés ou des méthodes est nécessaire, souvent dans le code hérité ou lors du test de logique complexe qui ne peut pas être facilement refactorisée. Cependant, il est généralement recommandé d'éviter d'utiliser de tels services publics, sauf si nécessaire, car ils peuvent contourner l'encapsulation et conduire à des tests fragiles [10].
En résumé, bien que les deux utilitaires Whitebox servent des fins similaires, la version de PowerMock est plus complète et largement disponible, tandis que la version de Mockito a été supprimée en raison des préoccupations concernant les pratiques de test. Whitebox de PowerMock est un outil puissant pour accéder et manipuler les états de classe interne, mais doit être utilisé judicieusement.
Citations:[1] https://stackoverflow.com/questions/40280918/what-do-i-use-instead-of-whitebox-in-mockito-2-2-to-set-fields
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
[3] https://proandroiddev.com/mockito-2-x-over-over-powermock-migration-tips-and-trricks-top-ten-118c52abd1d8
[4] https://johnmullins.co
[5] https://www.calsofic.com/blogs/unit-tetsting-mockito-powermockito.html
[6] https://www.javadoc.io/doc/org.powermock/powermock-reflect/latest/org/powermock/reflect/whitebox.html
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9] https://www.lambdatest.com/automation-tetsting-advisor/selenium/classes/org.powermock.reflect.whitebox
[10] https://github.com/powermock/powermock/wiki/BYPASS-Encapsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-ase-for-powermock/