Quando si utilizza PowerMock con mockito 2.x, possono sorgere diverse eccezioni e problemi comuni a causa di problemi di compatibilità e cambiamenti nell'API di mockito. Ecco alcune delle eccezioni più comuni e come affrontarle:
1. NoclassDeffounderror: org.mockito.cclib.proxy.methodinterceptor **
Questa eccezione si verifica quando si utilizza l'estensione dell'API Powermock errata. L'estensione `Powermock-Api-Mockito` non funziona con Mockito 2.x, portando a questo errore. Per risolverlo, è necessario utilizzare invece l'estensione `Powermock-Api-Mockito2` [1] [2].2. Versioni incompatibili di mockito e powermock **
L'uso di versioni incompatibili di Mockito e Powermock può portare a varie eccezioni. Ad esempio, Powermock 1.6.5 ha un supporto sperimentale per mockito 2.x, ma non è affidabile. Assicurati di utilizzare versioni compatibili, come Powermock 1.7.0 RC2 con mockito 2.1.0 [1] [2].3. Illegaleaccesserror con mockito 2.7.1 **
Quando si utilizza Powermock 1.6.5 o 1.7.0 RC2 con mockito 2.7.1, è possibile incontrare un `` illegaleaccesserror '. Questo problema viene risolto utilizzando PowerMock 1.7.0 RC4 [1] [4].4. RuntimeExceptionProxy in mockito 2.x con powermock **
In mockito 2.x con powermock, le eccezioni originali sono avvolte come `runtimeexceptionproxy`. Ciò richiede le annotazioni di test di modifica da `@test (previste = someException.class)` a `@test (previsto = eccezione.class)` per catturare le eccezioni avvolte [1].5. FieldNotfoundException con Whitebox di Powermock **
Mockito 2.x rimosso Whitebox, quindi l'uso di Whitebox di Powermock può portare a `FieldNotFoundException`. Se ciò si verifica, considera di scrivere la propria implementazione o refactare il codice per una migliore testabilità [1] [2].6. UnfinishedStubbingException **
Questa eccezione può verificarsi anche quando lo stuzzichino sembra corretta. Assicurarsi che non vi siano creazioni simulate in linea all'interno di metodi di stuzzichini e che tutto lo stoping sia adeguatamente completato con metodi come `thereturn ()` o `thenthrow ()` [3].7. Problemi di compatibilità con le versioni mockito più recenti **
Powermock potrebbe non essere compatibile con le versioni più recenti di mockito, come Mockito 4.0.0. In tali casi, potrebbe essere necessario utilizzare una versione precedente di mockito compatibile con Powermock [10].Complessivamente, la migrazione di Mockito 2.x da Mockito 1.x con PowerMock implica affrontare questi problemi di compatibilità e potenzialmente refactoring Test per evitare di usare del tutto PowerMock [1] [4].
Citazioni:[1] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-ands-sricks-top-ten-118c52abd1d8
[2] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-tips-e-tricks
[3] https://stackoverflow.com/questions/33441494/mockito-powermockito-weird-2xception
[4] https://proandroiddev.com/mockito-2-x-migration-session-recording-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-unexpected-exception-and-org-mockito-exceptions-m
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-dependency-isse
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109