Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mitkä ovat pääerot PowerMockin Whiteboxin ja Mockiton Whiteboxin välillä


Mitkä ovat pääerot PowerMockin Whiteboxin ja Mockiton Whiteboxin välillä


PowerMockin Whitebox ja Mockiton Whitebox ovat molemmat apuohjelmia, joita käytetään luokkien sisäisten tilojen käyttämiseen ja manipulointiin, mutta niillä on selkeät erot niiden alkuperässä, toiminnallisuuksissa ja käyttöympäristöissä.

Alkuperä ja saatavuus

- Mockiton Whitebox: Tämä oli sisäinen luokka Mockiton sisällä, jonka avulla käyttäjät voivat asettaa objektien sisäiset tilat. Se poistettiin kuitenkin Mockito 2.x: stä johtuen huolenaiheista huonojen testauskäytäntöjen edistämisestä ja koska sitä ei ollut tarkoitettu julkiseen käyttöön [11]. Siihen luottavat käyttäjiä rohkaistiin vaihtamaan vaihtoehdoihin, kuten Powermockin Whitebox tai toteuttamaan omat heijastuslaitokset [3].

- PowerMockin Whitebox: Tämä on osa PowerMock -kirjastoa, joka laajentaa Mockiton ominaisuuksia sallimalla muun muassa yksityisten, staattisten ja lopullisten menetelmien pilkkaaminen [5]. PowerMockin Whitebox tarjoaa testeihin tarkoitetun yksinkertaistetun heijastusapuohjelman, joka mahdollistaa pääsyn yksityisiin jäseniin ja yksityisten menetelmien kutsumisen [2] [6].

Toiminnallisuus

- Mockiton Whitebox (historiallinen): Ennen sen poistamista Mockiton Whitebox antoi käyttäjille mahdollisuuden asettaa objektien sisäiset tilat käyttämällä menetelmiä, kuten "setinternalstate". Tämä oli hyödyllistä injektoida pilkkauksia luokkiin ilman julkisia settereitä.

- PowerMockin Whitebox: tarjoaa laajemman sarjan toimintoja, mukaan lukien:
- Yksityisten jäsenten käyttö: menetelmät, kuten `getInternalState`, sallivat yksityisten kenttäarvojen hakemisen.
- Yksityisten menetelmien kutsuminen: "InvoKemethod` -menetelmä voi soittaa yksityisiin menetelmiin, mukaan lukien staattiset menetelmät [4] [10].
- Yksityisten kenttien asettaminen: Vaikka PowerMockin Whiteboxia ei nimenomaisesti dokumentoitu, voidaan käyttää yksityisten kenttien asettamiseen heijastuksen kautta, vaikka tämä ei ole sen ensisijainen tarkoitus.

Käyttöyhteys

- Mockiton Whitebox: Koska sitä ei enää ole saatavana Mockito 2.x: ssä, käyttäjiä kehotetaan käyttämään vaihtoehtoja, kuten PowerMockin Whitebox tai Springin "ReflectionTestTtils", jos tarvitaan [1] [3].

- PowerMockin Whitebox: Tyypillisesti käytetään skenaarioissa, joissa suora pääsy yksityisiin jäseniin tai menetelmiin on välttämätöntä, usein vanhassa koodissa tai testattaessa monimutkaista logiikkaa, jota ei voida helposti reagoida. Tällaisten apuohjelmien käyttöä on kuitenkin yleisesti suositeltavaa, ellei ne ole ehdottoman välttämätöntä, koska ne voivat ohittaa kapseloinnin ja johtaa hauraisiin testeihin [10].

Yhteenvetona voidaan todeta, että vaikka molemmat Whitebox -apuohjelmat palvelevat samanlaisia ​​tarkoituksia, PowerMockin versio on kattavampi ja laajalti saatavilla, kun taas Mockiton versio poistettiin testauskäytäntöjen huolenaiheiden vuoksi. PowerMockin Whitebox on tehokas työkalu sisäisten luokkatilojen käyttämiseen ja manipuloimiseen, mutta sitä tulisi käyttää järkevästi.

Viittaukset:
.
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
.
[4] https://johnmullins.co
[5] https://www.calsoftinc.com/blogs/unit-testing-mockito-powermockito.html
.
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9.
[10] https://github.com/powermock/powermock/wiki/bypass-capsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/