PowerMock et Mockito sont tous deux utilisés pour se moquer en Java, mais ils servent des objectifs différents et ont des caractéristiques distinctes, en particulier dans la façon dont ils gèrent la moquerie à travers leurs implémentations respectives de «Mockmaker».
Mockmaker de PowerMock
PowerMock étend d'autres bibliothèques simulées comme Easymock et Mockito en offrant des capacités plus puissantes. Il utilise un chargeur de classe personnalisé et une manipulation de bytecode pour permettre la moquerie des méthodes statiques, des constructeurs, des classes et méthodes finales, des méthodes privées et l'élimination des initialiseurs statiques [4] [9]. `MockMaker 'de PowerMock est mis en œuvre par la classe` `PowerMockmaker' ', qui délégue des appels à un autre« Mockmaker »si nécessaire. Cela permet à PowerMock de fonctionner aux côtés d'autres cadres moqueurs sans conflits, à condition qu'il soit configuré correctement [7].
L'approche de PowerMock est plus invasive, nécessitant une manipulation de bytecode pour atteindre ses capacités de moquerie avancées. Cela peut être bénéfique pour les scénarios complexes où Mockito seul est insuffisant, comme se moquer des méthodes statiques ou des méthodes privées [9].
Mockito's Mock-Maker-inline
«Mock-Maker-Inline» de Mockito est une fonctionnalité introduite pour permettre la moquerie des classes et méthodes finales. Il ne nécessite pas de manipulation bytecode comme PowerMock mais utilise plutôt l'API d'instrumentation de Java pour modifier les classes lors de l'exécution. Cette approche est moins invasive et n'a pas besoin d'un chargeur de classe personnalisé [2] [8].
Pour activer `Mock-Maker-Inline`, vous ajoutez généralement un fichier nommé` org.mockito.plugins.mockmaker` avec le contenu `Mock-Maker-inline` dans le répertoire` src / test / ressources / mockito-extensions`. Alternativement, vous pouvez utiliser l'artefact «Mockito-inline», ce qui simplifie le processus en ne nécessitant pas de configuration manuelle du fichier d'extension «MockMaker» [2] [10].
Les versions Mockito 5.0.0 et ultérieures utilisent «Mock-Maker-inline» comme Mock Maker par défaut, ce qui facilite la moquette de classes et méthodes finales sans configuration supplémentaire [3] [10].
Différences clés
- Invasivesive: PowerMock est plus invasif en raison de son utilisation de la manipulation de Bytecode et d'un chargeur de classe personnalisé, tandis que `Mock-Maker-Inline» de Mockito utilise l'instrumentation Java, qui est moins invasive.
- Capacités: PowerMock peut se moquer des méthodes statiques, des constructeurs et des méthodes privées, ce que Mockito ne peut pas faire sans outils supplémentaires comme «Mockito-inline» pour les classes et méthodes finales.
- Configuration: PowerMock nécessite une configuration spécifique pour déléguer à d'autres implémentations `Mockmaker», tandis que `Mock-Maker-Inline` de Mockito peut être activé avec un fichier de configuration simple ou en utilisant l'artefact` Mockito-inline`.
- Comportement par défaut: dans Mockito 5 et ultérieurement, «Mock-Maker-Inline» est la valeur par défaut, tandis que PowerMock nécessite toujours une configuration explicite pour utiliser ses fonctionnalités avancées.
En résumé, bien que PowerMock et «Mock-Maker-inline» de Mockito améliorent les capacités de moquerie, ils diffèrent considérablement par leur approche, leur invasivité et les types de moqueurs qu'ils soutiennent. PowerMock est plus puissant mais aussi plus complexe, tandis que «Mock-Maker-Inline» de Mockito offre un moyen plus simple de se moquer des classes et méthodes finales.
Citations:[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[3] https://stackoverflow.com/questions/65986197/différence-between-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockito-core/3.2.4/org/mockito/plugins/inlinemockmaker.html
[6] https://www.lambdatest.com/automation-tetsting-advisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.api.mockito.mockmaker.powermockmaker
[8] https://davidvlijmincx.com/posts/mockito_mock_final_methods_and_classes/
[9] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and how-does-it-work-to-mock-final-methods