Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Quali sono le eccezioni comuni quando si utilizza Powermock con mockito 2.x


Quali sono le eccezioni comuni quando si utilizza Powermock con mockito 2.x


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