Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kādi ir izplatītie izņēmumi, lietojot PowerMock ar Mockito 2.x


Kādi ir izplatītie izņēmumi, lietojot PowerMock ar Mockito 2.x


Izmantojot PowerMock ar Mockito 2.x, saderības problēmu un Mockito API izmaiņu dēļ var rasties vairāki kopīgi izņēmumi un problēmas. Šeit ir daži no visizplatītākajiem izņēmumiem un to, kā tos risināt:

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

Šis izņēmums rodas, izmantojot nepareizu PowerMock API paplašinājumu. `PowerMock-API-Mockito` paplašinājums nedarbojas ar Mockito 2.x, izraisot šo kļūdu. Lai to labotu, jums vajadzētu izmantot paplašinājumu “PowerMock-API-Mockito2” [1] [2].

2. nesaderīgas Mockito un Powermock versijas **

Izmantojot nesaderīgas Mockito un Powermock versijas, var izraisīt dažādus izņēmumus. Piemēram, PowerMock 1.6.5 ir eksperimentāls atbalsts Mockito 2.x, taču tas nav uzticams. Pārliecinieties, ka izmantojat saderīgas versijas, piemēram, PowerMock 1.7.0 RC2 ar Mockito 2.1.0 [1] [2].

3. NelegalAccessError ar Mockito 2.7.1 **

Izmantojot PowerMock 1.6.5 vai 1,7.0 RC2 ar Mockito 2.7.1, jūs varat sastapties ar “nelegālo akcijām”. Šis jautājums tiek atrisināts, izmantojot PowerMock 1.7.0 RC4 [1] [4].

4. RuntimeExceptionProxy in Mockito 2.x ar PowerMock **

Mockito 2.x ar PowerMock oriģinālie izņēmumi tiek iesaiņoti kā “RuntimeExceptionProxy”. Tas prasa modificēt testa anotācijas no `@test (sagaidāmais = someException.class)` uz `@test (paredzēts = izņēmums.class)`, lai noķertu iesaiņotos izņēmumus [1].

5. FieldNotFoundException ar Powermock Whitebox **

Mockito 2.x noņemts WhiteBox, tāpēc, izmantojot PowerMock W WhiteBox, var izraisīt "FieldNotFoundException". Ja tas notiek, apsveriet iespēju rakstīt savu ieviešanu vai reaģēt uz kodu, lai iegūtu labāku pārbaudāmību [1] [2].

6. nepabeigtsstubbingException **

Šis izņēmums var rasties pat tad, ja stubbing šķiet pareizs. Pārliecinieties, ka stūbēšanas metodēs nav iekšas izspēles un ka visa stūbēšana ir pareizi pabeigta ar tādām metodēm kā `thterReturn ()` vai `thentrow ()` [3].

7. Saderības problēmas ar jaunākām Mockito versijām **

Powermock var nebūt saderīgs ar jaunākām Mockito versijām, piemēram, Mockito 4.0.0. Šādos gadījumos varētu būt nepieciešama vecāka Mockito versijas izmantošana, kas ir saderīga ar Powermock [10].

Kopumā migrēšana uz Mockito 2.x no Mockito 1.x ar Powermock ietver šo saderības problēmu risināšanu un potenciāli reakcijas testus, lai pilnībā neizmantotu PowerMock [1] [4].

Atsauces:
[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-tiop-10-tips-and-tricks
[3] https://stackoverflow.com/questions/33441494/mockito-powermockito-weird-bubbing-exception
.
[5] https://github.com/powermock/powermock/issues/706
[6] https://github.com/mockito/mockito/issues/1606
.
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-depenencies-issue
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109