Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Wat zijn de belangrijkste verschillen tussen PowerMock's Whitebox en Mockito's Whitebox


Wat zijn de belangrijkste verschillen tussen PowerMock's Whitebox en Mockito's Whitebox


De whitebox van PowerMock en de whitebox van Mockito zijn beide hulpprogramma's die worden gebruikt voor toegang tot en manipuleren van interne klassen, maar ze hebben verschillende verschillen in hun oorsprong, functionaliteiten en gebruikscontexten.

Oorsprong en beschikbaarheid

- Mockito's Whitebox: dit was een interne klasse binnen Mockito waarmee gebruikers interne staten van objecten konden instellen. Het werd echter verwijderd uit Mockito 2.x vanwege zorgen over het bevorderen van slechte testpraktijken en omdat het niet bedoeld was voor openbaar gebruik [11]. Gebruikers die erop vertrouwden, werden aangemoedigd om over te schakelen naar alternatieven zoals PowerMock's Whitebox of hun eigen reflectiebedrijven te implementeren [3].

- Witebox van PowerMock: dit maakt deel uit van de PowerMock -bibliotheek, die de mogelijkheden van Mockito uitbreidt door onder andere het spotten van privé-, statische en definitieve methoden toe te staan ​​[5]. De whitebox van PowerMock biedt een vereenvoudigd reflectiehulpprogramma dat bedoeld is voor tests, waardoor toegang tot particuliere leden mogelijk wordt en aanroep van privémethoden [2] [6].

functionaliteit

- Mockito's whitebox (historisch): vóór de verwijdering konden de whitebox van Mockito gebruikers interne staten van objecten instellen met behulp van methoden zoals `setinternalState`. Dit was handig voor het injecteren van mocks in klassen zonder openbare setters.

- PowerMock's Whitebox: biedt een bredere reeks functionaliteiten, waaronder:
- Toegang tot particuliere leden: methoden zoals `getinternalState` maken het ophalen van privé -veldwaarden mogelijk.
- Een beroep doen op privémethoden: de methode `invokemethod` kan privémethoden oproepen, inclusief statische [4] [10].
- Privévelden instellen: hoewel niet expliciet gedocumenteerd, kan de whitebox van PowerMock worden gebruikt om privévelden in te stellen door reflectie, hoewel dit niet het primaire doel is.

Gebruikscontext

- Witebox van Mockito: omdat het niet langer beschikbaar is in Mockito 2.x, wordt gebruikers geadviseerd om alternatieven te gebruiken zoals PowerMock's WhiteBox of Spring's `ReflectionTestutils` indien van toepassing [1] [3].

- Witebox van PowerMock: meestal gebruikt in scenario's waarbij directe toegang tot privéleden of methoden nodig is, vaak in legacy -code of bij het testen van complexe logica die niet gemakkelijk kan worden gerefacteerd. Het wordt echter in het algemeen aanbevolen om dergelijke hulpprogramma's te voorkomen, tenzij absoluut noodzakelijk, omdat ze inkapseling kunnen omzeilen en leiden tot brosse tests [10].

Samenvattend, hoewel beide whitebox -hulpprogramma's vergelijkbare doeleinden dienen, is de versie van PowerMock uitgebreider en overal beschikbaar, terwijl de versie van Mockito werd verwijderd vanwege zorgen over testpraktijken. De whitebox van PowerMock is een krachtig hulpmiddel voor toegang tot en manipuleren van interne klassenstaten, maar moet oordeelkundig worden gebruikt.

Citaten:
[1] https://stackoverflow.com/questions/40280918/what--i-Use-in-Stead-F-WhiteBox-in-Mockito-2-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-powermock-migration-dips-and-tricks-top-118c52abd1d8
[4] https://johnmullins.co
[5] https://www.calsoftinc.com/blogs/unit-testing-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-capsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powerMock/