Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kokie yra pagrindiniai skirtumai tarp „PowerMock“ „Whitebox“ ir „Mockito“ „Whitebox“


Kokie yra pagrindiniai skirtumai tarp „PowerMock“ „Whitebox“ ir „Mockito“ „Whitebox“


„PowerMock“ „Whitebox“ ir „Mockito“ „Whitebox“ yra naudingumo klasės, naudojamos prieigai prie vidinių klasių būsenų ir manipuliavimo, tačiau jos turi aiškius savo kilmės, funkcionalumo ir naudojimo konteksto skirtumus.

Kilmė ir prieinamumas

- „Mockito“ „WhiteBox“: Tai buvo vidinė „Mockito“ klasė, leidžianti vartotojams nustatyti vidines objektų būsenas. Tačiau jis buvo pašalintas iš „Mockito 2.x“ dėl susirūpinimo dėl blogo testavimo praktikos skatinimo ir dėl to, kad ji nebuvo skirta visuomenės naudojimui [11]. Vartotojai, kurie tuo rėmėsi, buvo skatinami pereiti prie alternatyvų, tokių kaip „PowerMock“ „Whitebox“ ar įgyvendinti savo atspindžio komunalines paslaugas [3].

- „PowerMock“ „WhiteBox“: Tai yra „PowerMock“ bibliotekos dalis, kuri, be kitų funkcijų, pratęsia „Mockito“ galimybes, leisdamas tyčiojant iš privačių, statinių ir galutinių metodų [5]. „PowerMock“ „WhiteBox“ pateikia supaprastintą atspindžio naudingumą, skirtą bandymams, suteikiant galimybę pasiekti privačius narius ir pašaukti privačius metodus [2] [6].

funkcionalumas

- „Mockito“ „WhiteBox“ (istorinė): Prieš pašalinant jį, „Mockito“ „WhiteBox“ leido vartotojams nustatyti objektų vidines būsenas, naudojant tokius metodus kaip „setInternalstate“. Tai buvo naudinga švirkščiant tyčiojimus į užsiėmimus be viešųjų seterių.

- „PowerMock“ „WhiteBox“: siūlo platesnį funkcijų rinkinį, įskaitant:
- Prieigos prie privačių narių prieiga: tokie metodai, tokie kaip „getInternalstate“, leidžia gauti privačių lauko verčių.
- Privačių metodų raginimas: „Interkemethod“ metodas gali vadinti privačius metodus, įskaitant statinius [4] [10].
- Privačių laukų nustatymas: Nors „PowerMock Whitebox“ nėra aiškiai dokumentuojama, „PowerMock“ „WhiteBox“ gali būti naudojamas norint nustatyti privačius laukus per apmąstymus, nors tai nėra pagrindinis tikslas.

Naudojimo kontekstas

- „Mockito“ „WhiteBox“: kadangi jo nebėra „Mockito 2.x“, vartotojams patariama naudoti alternatyvas, tokias kaip „PowerMock“ „WhiteBox“ ar „Spring“ „atspindystestutils“, jei taikoma [1] [3].

- „PowerMock“ „WhiteBox“: paprastai naudojamas scenarijuose, kai būtina tiesioginė prieiga prie privačių narių ar metodų, dažnai senajame kode arba bandant sudėtingą logiką, kurios negalima lengvai reaguoti. Tačiau paprastai rekomenduojama vengti naudoti tokias komunalines paslaugas, nebent būtina, nes jie gali apeiti kapsulę ir sukelti trapius testus [10].

Apibendrinant, nors abi „WhiteBox“ komunalinės paslaugos tarnauja panašiems tikslams, „PowerMock“ versija yra išsamesnė ir plačiai prieinama, tuo tarpu „Mockito“ versija buvo pašalinta dėl susirūpinimo dėl testavimo praktikos. „PowerMock“ „Whitebox“ yra galingas įrankis, skirtas pasiekti ir manipuliuoti vidaus klasės būsenomis, tačiau turėtų būti naudojama protingai.

Citatos:
[1] https://stackoverflow.com/questions/40280918/what-do-i-use-instead-of-whitebox-in-mockito-2--to-set-fields
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
[3] https://proandroiddev.com/mockito-2-x-over- over-powermock-migration-pips-and-tricks-top-ten-118c52abd1d8
[4] https://johnmulllins.co
[5] https://www.calsofinc.com/blogs/unit-test-necting-mockito-powermockito.html
[6] https://www.javadoc.io/doc/org.powermock/powermock-reflect/latest/org/powermock/reflect/whitebox.html
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.reflect.whiteBox
[10] https://github.com/powermock/powermock/wiki/bypass-encapsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/