Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mitkä ovat yleiset ongelmat, kun käytät PowerMockia Mockiton kanssa


Mitkä ovat yleiset ongelmat, kun käytät PowerMockia Mockiton kanssa


Kun käytät PowerMockia Mockiton kanssa, niiden integroinnin monimutkaisuuden vuoksi voi syntyä useita yleisiä ongelmia. Tässä on joitain yksityiskohtaisia ​​selityksiä näistä aiheista:

yhteensopimattomat versiot

Yksi ensisijaisista haasteista on varmistaa, että Mockito ja Powermockin versiot ovat yhteensopivia. Esimerkiksi PowerMock -versio 1.7.0 RC2 on yhteensopiva Mockito -version 2.1.0 kanssa [1] [4]. Yhteensopimattomien versioiden käyttäminen voi johtaa virheisiin, kuten "java.lang.NoclassDeffoundError" tai "java.lang.classNotFoundException", koska PowerMock riippuu versioiden välisistä sisäisistä mockito -sovellusliittymistä [1] [4].

Mockito API -laajennukset

PowerMock vaatii oikean Mockito API -laajennuksen toimimaan oikein Mockito 2.x: n kanssa. `PowerMock-Api-Mockito` -laajennus ei toimi Mockito 2.x: n kanssa ja aiheuttaa poikkeuksia, kuten` java.lang.NoclassDeffoundError: org/mockito/cglib/välityspalvelin/metoditionterceptor`. Sen sijaan sinun tulisi käyttää `PowerMock-Api-Mockito2` näiden ongelmien välttämiseksi [1] [4].

Whiteboxin poisto

Mockito 2.x ei enää sisällä Whitebox -ominaisuutta, jota käytettiin objektien sisäisen tilan asettamiseen. PowerMock tarjoaa oman Whiteboxin, mutta sen käyttäminen voi johtaa esimerkiksi `org.powermock.reflect.exceptions.fieldNotFoundException`. Jos PowerMockin Whitebox ei toimi sinulle, harkitse oman toteutuksen kirjoittamista [1] [4].

MockMaker -kokoonpano

PowerMock toteuttaa oman "MockMaker", joka voi olla ristiriidassa Mockiton "Mock-Maker-INLINE" kanssa, jos molemmat ovat läsnä luokkapolussa. Tämän ratkaisemiseksi voit määrittää PowerMockin siirtämään Mockiton "MockMaker" -sovellukseen asettamalla "Mockito.mock-Maker-Class = Mock-Maker-INLine" kokoonpanotiedostoon [3].

Poikkeuskäsittely

Kun käytät PowerMockia Mockito 2.x: n kanssa, alkuperäiset testipoikkeukset kääritään nimellä "RuntimeExceptionProxy". Tämä edellyttää testien merkintöjen muokkaamista `@test (odotettu = jotkutException.Class)` arvoon `@test (odotettu = poikkeus.Class)` käärittyjen poikkeusten tarttumiseksi [4].

Integraatio muihin kehyksiin

PowerMock voi olla ristiriidassa muiden puitteiden tai kirjastojen, kuten kevään tai tiettyjen Java -versioiden kanssa tavukoodin manipulointitekniikoiden vuoksi [9]. Tämä voi johtaa hitaampaan testien suorittamiseen ja ylimääräiseen monimutkaisuuteen riippuvuuksien hallinnassa [9].

monimutkaisuus ja suorituskyky

Powermockin edistyneiden ominaisuuksien lisääntyminen ja hitaampi testien suorittaminen tavukoodin manipuloinnin vuoksi. Tämä voi vaikeuttaa testien asettamista ja ylläpitämistä pelkästään Mockiton käyttöön [9].

Kaiken kaikkiaan, vaikka PowerMock tarjoaa tehokkaita pilkkaavia ominaisuuksia, etenkin vanhojen koodien tai monimutkaisten staattisten menetelmien suhteen, se vaatii huolellista asennusta ja hallintaa integrointikysymysten välttämiseksi Mockiton ja muiden puitteiden kanssa.

Viittaukset:
.
[2] https://stackoverflow.com/questions/43669909/powermock-fails-tests
[3] https://github.com/powermock/powermock/wiki/mockito
.
[5] https://github.com/powermock/powermock/issues/811
[6] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[7] https://github.com/mockk/mockk/issues/79
.
[9.