Cuando se usa PowerMock con Mockito 2.x, pueden surgir varias excepciones y problemas comunes debido a problemas de compatibilidad y cambios en la API de Mockito. Estas son algunas de las excepciones más comunes y cómo abordarlas:
1. NoclassDeffoundError: org.mockito.cglib.proxy.methodinterceptor **
Esta excepción ocurre cuando se usa la extensión de la API PowerMock incorrecta. La extensión `PowerMock-API-Mockito` no funciona con Mockito 2.x, lo que lleva a este error. Para solucionarlo, debe usar la extensión `powmock-api-mockito2` en su lugar [1] [2].2. Versiones incompatibles de Mockito y PowerMock **
El uso de versiones incompatibles de Mockito y PowerMock puede conducir a varias excepciones. Por ejemplo, PowerMock 1.6.5 tiene soporte experimental para Mockito 2.x, pero no es confiable. Asegúrese de utilizar versiones compatibles, como PowerMock 1.7.0 RC2 con Mockito 2.1.0 [1] [2].3. Illegalaccessror con Mockito 2.7.1 **
Cuando usa PowerMock 1.6.5 o 1.7.0 RC2 con Mockito 2.7.1, puede encontrar un `ilegalaccesserror`. Este problema se resuelve utilizando PowerMock 1.7.0 RC4 [1] [4].4. RuntimeExceptionProxy en Mockito 2.x con PowerMock **
En Mockito 2.x con PowerMock, las excepciones originales están envueltas como `RuntimeExceptionProxy`. Esto requiere modificar las anotaciones de prueba de `@test (esperado = SomeException.Class)` a `@Test (esperado = excepcion.class)` para atrapar las excepciones envueltas [1].5. FieldNotFoundException con PowerMock s Whitebox **
Mockito 2.x eliminó Whitebox, por lo que el uso de Whitebox de PowerMock puede conducir a `FieldNotFoundException`. Si esto ocurre, considere escribir su propia implementación o refactorizar su código para una mejor capacidad de prueba [1] [2].6. Sin terminar StubbingException **
Esta excepción puede ocurrir incluso cuando el rastreo parece correcto. Asegúrese de que no haya creaciones simuladas en línea dentro de los métodos de revuelo y que todo el trozo se complete correctamente con métodos como `thenreturn ()` o `Thenthrow ()` [3].7. Problemas de compatibilidad con versiones de Mockito más nuevas **
PowerMock puede no ser compatible con versiones de Mockito más nuevas, como Mockito 4.0.0. En tales casos, podría ser necesaria una versión anterior de Mockito que sea compatible con PowerMock [10].En general, la migración a Mockito 2.x desde Mockito 1.x con PowerMock implica abordar estos problemas de compatibilidad y potencialmente refactorizar las pruebas para evitar el uso de PowerMock por completo [1] [4].
Citas:[1] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-118c52abd1d8
[2] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-tips-and tricks
[3] https://stackoverflow.com/questions/33441494/mockito-powermockito-weird-stubbing-exception
[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-unespected-exception-and-org-mockito-excepciones-m
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-dependences-isement
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109