Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Які загальні винятки при використанні PowerMock з Mockito 2.x


Які загальні винятки при використанні PowerMock з Mockito 2.x


Використовуючи PowerMock з Mockito 2.x, може виникнути кілька поширених винятків та проблем через проблеми сумісності та зміни в API Mockito. Ось кілька найпоширеніших винятків та як їх вирішити:

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

Цей виняток відбувається при використанні неправильного розширення API PowerMock. Розширення `PowerMock-api-mockito` не працює з Mockito 2.x, що призводить до цієї помилки. Щоб виправити це, слід замість цього використовувати розширення `PowerMock-api-mockito2` [1] [2].

2. несумісні версії Mockito та PowerMock **

Використання несумісних версій Mockito та PowerMock може призвести до різних винятків. Наприклад, PowerMock 1.6.5 має експериментальну підтримку для Mockito 2.x, але це не є надійним. Переконайтесь, що ви використовуєте сумісні версії, такі як PowerMock 1.7.0 RC2 з Mockito 2.1.0 [1] [2].

3. Незаконнеаксесеррор з Mockito 2.7.1 **

Використовуючи PowerMock 1.6.5 або 1.7.0 RC2 з Mockito 2.7.1, ви можете зіткнутися з `нелегкокомсесеррором". Ця проблема вирішується за допомогою PowerMock 1.7.0 RC4 [1] [4].

4. RuntimeexceptionProxy в Mockito 2.x з PowerMock **

У Mockito 2.x з PowerMock оригінальні винятки обгорнуті як `runtimeexceptionProxy '. Це вимагає модифікації тестових анотацій з `@test (очікуване = suceException.class)` до `@test (очікуване = винятком.class)`, щоб зловити обгорнути винятки [1].

5. FieldNotFoundException з білою скринькою PowerMock **

Mockito 2.x видалив Whitebox, тому використання PowerMock's Whitebox може призвести до `FieldNotFoundException`. Якщо це відбувається, подумайте про написання власної реалізації або рефакторингу коду для кращої тестування [1] [2].

6. UnfulAndingStubbingException **

Цей виняток може виникнути навіть тоді, коли заглушування здається правильним. Переконайтесь, що в методах заглушень не існує вбудованих макетних творінь і що вся заглушка належним чином завершена такими методами, як `` тодішнє () `або` thenthrow () `[3].

7. Проблеми сумісності з новими версіями Mockito **

PowerMock може не бути сумісним з новими версіями Mockito, такими як Mockito 4.0.0. У таких випадках може знадобитися старша версія Mockito, сумісної з PowerMock [10].

Загалом, переміщення до Mockito 2.x з Mockito 1.x з PowerMock передбачає вирішення цих проблем сумісності та потенційно рефакторингового тестів, щоб уникнути використання PowerMock [1] [4].

Цитати:
[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-undabeed-exception-and-org-mockitoexceptions-m
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-dependences-issue
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109