Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Care sunt excepțiile comune atunci când utilizați Powermock cu Mockito 2.x


Care sunt excepțiile comune atunci când utilizați Powermock cu Mockito 2.x


Când utilizați Powermock cu Mockito 2.X, pot apărea mai multe excepții și probleme comune din cauza problemelor de compatibilitate și a modificărilor în API -ul Mockito. Iată câteva dintre cele mai frecvente excepții și cum să le abordăm:

1. NoclassDefFoundError: org.mockito.cglib.proxy.MethodInterceptor **

Această excepție apare atunci când utilizați extensia API PowerMock greșită. Extensia `PowerMock-API-Mockito` nu funcționează cu Mockito 2.X, ceea ce duce la această eroare. Pentru a-l repara, ar trebui să utilizați extensia `PowerMock-API-MOCKITO2` în schimb [1] [2].

2. Versiuni incompatibile ale Mockito și PowerMock **

Utilizarea versiunilor incompatibile ale Mockito și Powermock poate duce la diverse excepții. De exemplu, PowerMock 1.6.5 are suport experimental pentru Mockito 2.x, dar nu este de încredere. Asigurați -vă că utilizați versiuni compatibile, cum ar fi PowerMock 1.7.0 RC2 cu Mockito 2.1.0 [1] [2].

3. ilegalacceserror cu Mockito 2.7.1 **

Când utilizați PowerMock 1.6.5 sau 1.7.0 RC2 cu Mockito 2.7.1, puteți întâlni un „ilegalaccesserror”. Această problemă este rezolvată folosind PowerMock 1.7.0 RC4 [1] [4].

4. RuntimeExceptionProxy în Mockito 2.x cu Powermock **

În Mockito 2.x cu PowerMock, excepțiile originale sunt înfășurate ca `RuntimeExceptionProxy`. Acest lucru necesită modificarea adnotărilor de testare de la `@test (așteptat = someException.class)` la `@test (așteptat = excepție.class)` pentru a prinde excepțiile învelite [1].

5. FieldNotFoundException cu PowerMock S Whitebox **

Mockito 2.x a eliminat Whitebox, astfel încât utilizarea cutiei albe PowerMock poate duce la `FieldNotFoundException`. Dacă se întâmplă acest lucru, luați în considerare scrierea propriei implementări sau refactorizarea codului dvs. pentru o mai bună testare [1] [2].

6. NesinishedStubbingException **

Această excepție poate apărea chiar și atunci când stupiciul pare corect. Asigurați -vă că nu există creații batjocoritoare în linii de chemare și că toate stâlpii sunt completate în mod corespunzător cu metode precum `thenTurn ()` sau `thenthrow ()` [3].

7. Probleme de compatibilitate cu versiuni mai noi Mockito **

Powermock poate să nu fie compatibil cu versiunile mai noi Mockito, cum ar fi Mockito 4.0.0. În astfel de cazuri, ar putea fi necesară utilizarea unei versiuni mai vechi de Mockito care este compatibilă cu PowerMock [10].

În general, migrarea către Mockito 2.X de la Mockito 1.x cu Powermock implică abordarea acestor probleme de compatibilitate și potențialul de refactorizare a testelor pentru a evita utilizarea în totalitate a PowerMock [1] [4].

Citări:
[1] https://proandroiddev.com/mockito-2-x-over-powermock-migration-pips-and-trks-p-ten-118c52abd1d8
[2] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-pips-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-to-to-unexpected-exception-and-org-mockito-exceptions-m
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-dependențe-issue
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109