Lorsque vous utilisez PowerMock avec Mockito 2.x, plusieurs exceptions et problèmes courants peuvent survenir en raison de problèmes de compatibilité et de changements dans l'API Mockito. Voici quelques-unes des exceptions les plus courantes et comment les aborder:
1. NoclassdeffoundError: org.mockito.cglib.proxy.methodinterceptor **
Cette exception se produit lors de l'utilisation de la mauvaise extension de l'API PowerMock. L'extension `PowerMock-API-Mockito` ne fonctionne pas avec Mockito 2.x, conduisant à cette erreur. Pour le réparer, vous devez utiliser l'extension `PowerMock-API-Mockito2 'à la place [1] [2].2. Versions incompatibles de Mockito et PowerMock **
L'utilisation de versions incompatibles de Mockito et PowerMock peut conduire à diverses exceptions. Par exemple, PowerMock 1.6.5 a un support expérimental pour Mockito 2.x, mais il n'est pas fiable. Assurez-vous d'utiliser des versions compatibles, telles que PowerMock 1.7.0 RC2 avec Mockito 2.1.0 [1] [2].3. IllégalAccesserror avec Mockito 2.7.1 **
Lorsque vous utilisez PowerMock 1.6.5 ou 1.7.0 RC2 avec Mockito 2.7.1, vous pouvez rencontrer un `illégalaccesserror». Ce problème est résolu en utilisant PowerMock 1.7.0 RC4 [1] [4].4. RuntimeExceptionProxy dans Mockito 2.x avec PowerMock **
Dans Mockito 2.x avec PowerMock, les exceptions originales sont enveloppées en `RuntimeExceptionProxy`. Cela nécessite de modifier les annotations de test de `@Test (attendu = someException.class)` à `@Test (attendu = exception.class)` pour attraper les exceptions enveloppées [1].5. FieldNotFoundException avec Whitebox de PowerMock **
Mockito 2.x a supprimé Whitebox, donc l'utilisation de Whitebox de PowerMock peut conduire à «FieldNotFoundException». Si cela se produit, envisagez d'écrire votre propre implémentation ou de refactoriser votre code pour une meilleure testabilité [1] [2].6. UnachedStubbingException **
Cette exception peut se produire même lorsque Stubbing semble correct. Assurez-vous qu'il n'y a pas de créations simulées en ligne dans les méthodes de stubbing et que tout le tronçon est correctement complété par des méthodes telles que `thereturn () 'ou' thenthrow () '[3].7. Problèmes de compatibilité avec les nouvelles versions de moquettes
PowerMock peut ne pas être compatible avec les versions Mockito plus récentes, telles que Mockito 4.0.0. Dans de tels cas, l'utilisation d'une ancienne version de Mockito qui est compatible avec PowerMock pourrait être nécessaire [10].Dans l'ensemble, la migration vers Mockito 2.x de Mockito 1.x avec PowerMock implique de résoudre ces problèmes de compatibilité et de refactoriser potentiellement les tests pour utiliser complètement PowerMock [1] [4].
Citations:[1] https://proandroiddev.com/mockito-2-x-over-over-powermock-migration-tips-and-trricks-top-ten-118c52abd1d8
[2] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-tips-and-pricks
[3] https://stackoverflow.com/questions/33441494/mockito-powermockito-weird-stubbing-exception
[4] https://proandroiddev.com/mockito-2-x-Migration-Session-Recgording-DroidCon-uk-2018-ba70619f3811
[5] https://github.com/powermock/powermock/issues/706
[6] https://github.com/mockito/mockito/issues/1606
[7] https://stackoverflow.com/questions/69394651/cannot-run-powermock-due-to-unexpection-exception-and-org-mockito-exceptions-
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-dependance-issue
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109