Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Aké sú bežné výnimky pri používaní Powermock s Mockito 2.x


Aké sú bežné výnimky pri používaní Powermock s Mockito 2.x


Pri používaní PowerMock s Mockito 2.x môže vzniknúť niekoľko bežných výnimiek a problémov v dôsledku problémov s kompatibilitou a zmenami v rozhraní Mocito API. Tu sú niektoré z najbežnejších výnimiek a ako ich osloviť:

1. NoclassDeffoundError: org.mockito.cglib.proxy.methodinterceptor **

Táto výnimka sa vyskytuje pri používaní nesprávneho rozšírenia API PowerMock. Rozšírenie `Powermock-Api-Mockito` nefunguje s Mockito 2.x, čo vedie k tejto chybe. Na jeho opravu by ste mali namiesto toho použiť rozšírenie „PowerMock-API-Mockito2` [1] [2].

2. Nekompatibilné verzie Mockito a Powermock **

Použitie nekompatibilných verzií Mockito a Powermock môže viesť k rôznym výnimkám. Napríklad Powermock 1.6.5 má experimentálnu podporu pre Mockito 2.x, ale nie je spoľahlivý. Uistite sa, že používate kompatibilné verzie, ako napríklad PowerMock 1.7.0 RC2 s Mockito 2.1.0 [1] [2].

3. NelegalAccesserror s Mockito 2.7.1 **

Pri použití Powermock 1.6.5 alebo 1.7.0 RC2 s Mockito 2.7.1 sa môžete stretnúť s `nelegalAccesserror`. Tento problém sa vyrieši pomocou spoločnosti Powermock 1.7.0 RC4 [1] [4].

4. RuntimeExceptionproxy v Mockito 2.x s Powermock **

V Mockito 2.x s Powermockom sú pôvodné výnimky zabalené ako „runtimeExceptionProxy“. Vyžaduje si to modifikačné testovacie anotácie z `@Test (očakávané = someException.class)` na `@Test (očakávané = výnimka.Class)` Zachytiť zabalené výnimky [1].

5. FieldNotfoundException s Whiteboxom Powermock

Mockito 2.x odstránený Whitebox, takže pomocou WhiteBoxu PowerMock môže viesť k `FieldNotFoundException`. Ak k tomu dôjde, zvážte písanie vlastnej implementácie alebo refaktorovanie kódu pre lepšiu testovateľnosť [1] [2].

6. NedokončenéStubbingException **

Táto výnimka sa môže vyskytnúť aj vtedy, keď sa javí správne. Uistite sa, že v metódach strbbovania nie sú žiadne inline falošné výtvory a aby sa všetky strpbovanie správne dokončilo metódami ako `thenreturn ()` alebo `thenthRow ()` [3].

7. Problémy s kompatibilitou s novšími verziami Mockito **

PowerMock nemusí byť kompatibilný s novšími verziami Mockito, napríklad Mockito 4.0.0. V takýchto prípadoch môže byť potrebné použitie staršej verzie Mocito, ktorá je kompatibilná s Powermockom [10].

Celkovo migrácia na Mockito 2.x z Mockito 1.x s Powermockom zahŕňa riešenie týchto problémov s kompatibilitou a potenciálne refaktoringové testy, aby sa zabránilo použitiu Powermock úplne [1] [4].

Citácie:
[1] https://proandroiddev.com/Mockito-2-x-powermock-migration-pigration-pips-and-tricks-top-ten-118c52abd1d8
[2] https://dzone.com/articles/Mockito-2x-wore-powermock-migration-top-10-Tips-and-ry-dricks
[3] https://stackoverflow.com/questions/33441494/MOCKITO-POWERMOCKITO-WEIRD-STUBBING-EXEMENT
[4] https://proandroiddev.com/Mockito-2-x-migration-session-recording-droidcon-uk-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-unexected-except-exception-and-org-orgito-exceptions-m
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-dependencies-issue
[9] https://groups.google.com/g/powermock/c/3g5z_t1rzq
[10] https://github.com/powermock/powermock/issues/1109