Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ¿Cuáles son las excepciones comunes al usar PowerMock con Mockito 2.x


¿Cuáles son las excepciones comunes al usar PowerMock con Mockito 2.x


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