Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kokios yra bendros problemos, kai naudojami „PowerMock“ su „Mockito“


Kokios yra bendros problemos, kai naudojami „PowerMock“ su „Mockito“


Naudojant „PowerMock“ su „Mockito“, dėl jų integracijos sudėtingumo gali kilti keletas bendrų klausimų. Čia yra keletas išsamių šių klausimų paaiškinimų:

nesuderinamos versijos

Vienas iš pagrindinių iššūkių yra užtikrinti, kad „Mockito“ ir „PowerMock“ versijos būtų suderinamos. Pavyzdžiui, „PowerMock“ versija 1.7.0 RC2 yra suderinama su „Mockito“ versija 2.1.0 [1] [4]. Naudodamiesi nesuderinamomis versijomis gali sukelti tokių klaidų kaip „java.lang.noclassDeffounderror“ arba „java.lang.clasSnotfoundException`“, nes „PowerMock“ priklauso nuo vidinių „Mockito“ API, kurie keičia tarp versijų [1] [4].

„Mockito“ API plėtiniai

„PowerMock“ reikalauja, kad teisingas „Mockito“ API plėtinys tinkamai veiktų su „Mockito 2.x“. „PowerMock-Api-Mockito“ plėtinys neveikia su „Mockito 2.X“ ir sukels tokias išimtis kaip „java.lang.noclassDeffounderror: org/mockito/cglib/serveris/methe-interceptor“. Vietoj to, norėdami išvengti šių problemų, turėtumėte naudoti „PowerMock-API-MOCKITO2“ [1] [4].

„WhiteBox“ pašalinimas

„Mockito 2.x“ nebėra „WhiteBox“ funkcija, kuri buvo naudojama vidinei objektų būsenai nustatyti. „PowerMock“ pateikia savo „WhiteBox“, tačiau jį naudodamiesi tokiomis problemomis, tokiomis kaip „org.powerMock.reflect.exceptions.fieldnotfoundException`“. Jei „PowerMock“ „WhiteBox“ jums neveikia, apsvarstykite galimybę parašyti savo diegimą [1] [4].

„Mockmaker“ konfigūracija

„PowerMock“ įgyvendina savo „Mockmaker“, kuris gali prieštarauti „Mockito“ „modelio gamintojui-inlinui“, jei abu yra klasėje. Norėdami tai išspręsti, galite sukonfigūruoti „PowerMock“, kad galėtumėte deleguoti „Mockito“ „Mockmaker“, nustatydami „Mockito.ock-Maker-Class = Mock-Maker-Inline“ konfigūracijos faile [3].

Išimčių tvarkymas

Kai naudojate „PowerMock“ su „Mockito 2.x“, originalios bandymo išimtys yra apvyniotos kaip „runtimeExceptionProxy“. Tam reikia modifikuoti bandymo anotacijas iš `@Test (tikimasi = SomeException.class)` į `@Test (tikimasi = išimtis.class)` sugauti suvyniotas išimtis [4].

integracija su kitomis rėmais

„PowerMock“ gali prieštarauti kitoms sistemoms ar bibliotekoms, tokioms kaip pavasario ar tam tikros „Java“ versijos, dėl savo „Bytecode“ manipuliavimo metodų [9]. Tai gali sukelti lėtesnį bandymo vykdymą ir papildomą sudėtingumą valdant priklausomybes [9].

Sudėtingumas ir našumas

Pažangios „PowerMock“ funkcijos atsiranda dėl padidėjusio sudėtingumo ir lėtesnio bandymo vykdymo dėl manipuliavimo baito kodu. Tai gali apsunkinti testus, kuriuos reikia nustatyti ir išlaikyti, palyginti su vien „Mockito“ naudojimu [9].

Apskritai, nors „PowerMock“ siūlo galingas tyčiojimosi galimybes, ypač naudojant senąjį kodą ar sudėtingus statinius metodus, reikia kruopštaus sąrankos ir valdymo, kad būtų išvengta integracijos problemų su „Mockito“ ir kitomis sistemomis.

Citatos:
[1] https://dzone.com/articles/mockito-2x-over- over-cowermock-migration-top-10-typs-and-tricks
[2] https://stackoverflow.com/questions/43669909/powermock-fails-tests
[3] https://github.com/powermock/powermock/wiki/mockito
[4] https://proandroiddev.com/mockito-2-x-over- over-powermock-migration-pips-and-tricks-top-Ten-118c52abd1d8
[5] https://github.com/powermock/powermock/issues/811
[6] https://stackoverflow.com/questions/6036450/powermock-bockito-vs-mockito-alone
[7] https://github.com/mock/mockk/issues/79
[8] https://objectcomputing.com/resources/publications/sett/september-2010-mockito-integration-testing-made-easier
[9] https://www.javacodegeeks.com/2024/12/mockito-vs-powerMock- which-o- one-choose-forming-static-methods.html