Whitebox spoločnosti Powermock a Whitebox Mockito sú obidve triedy úžitkových tried, ktoré sa používajú na prístup a manipuláciu s vnútornými stavmi tried, ale majú zreteľné rozdiely v ich pôvode, funkciách a kontextoch využívania.
Pôvod a dostupnosť
- Mockito's Whitebox: Toto bola interná trieda v rámci Mockito, ktorá používateľom umožnila nastaviť interné stavy objektov. Bol však odstránený z Mockito 2.x kvôli obavám z podpory zlých postupov testovania a pretože nebol určený na verejné použitie [11]. Používatelia, ktorí sa na ňu spoliehali, boli povzbudení, aby prešli na alternatívy, ako je Whitebox Powermock alebo implementoval svoje vlastné reflexné služby [3].
- Powermock's Whitebox: Toto je súčasť knižnice Powermock, ktorá rozširuje schopnosti Mockita tým, že okrem iného umožňuje zosmiešnenie súkromných, statických a konečných metód [5]. Whitebox spoločnosti Powermock poskytuje zjednodušený úžitkový úžitok určený pre testy, ktorý umožňuje prístup k súkromným členom a vyvoláva súkromné metódy [2] [6].
funkčnosť
- Mockito's Whitebox (Historical): Pred jeho odstránením umožnil Mockito's Whitebox používateľom nastaviť interné stavy objektov pomocou metód ako „setInternalState“. To bolo užitočné na vloženie falošných tried bez verejných osadníkov.
- Powermock's Whitebox: ponúka širšiu sadu funkcií vrátane:
- Prístup k súkromným členom: Metódy ako `getInternalState` umožňujú získavanie súkromných hodnôt v teréne.
- Vyvolanie súkromných metód: Metóda `Invokemethod` môže volať súkromné metódy vrátane statických metód [4] [10].
- Nastavenie súkromných polí: Aj keď to nie je výslovne zdokumentované, Whitebox Powermock sa dá použiť na nastavenie súkromných polí prostredníctvom reflexie, hoci to nie je jeho primárny účel.
Použitie kontextu
- Mockito's Whitebox: Pretože už nie je k dispozícii v Mockito 2.x, používatelia sa odporúča používať alternatívy ako Powermock's Whitebox alebo Spring's ReflectionTestutils`, ak je to možné [1] [3].
- Powermock's Whitebox: zvyčajne sa používa v scenároch, kde je potrebný priamy prístup k súkromným členom alebo metódami, často v dedičnom kóde alebo pri testovaní zložitej logiky, ktorú nemožno ľahko refaktorovať. Všeobecne sa však odporúča vyhnúť sa používaniu takýchto verejných služieb, pokiaľ to nie je nevyhnutné, pretože môžu obísť zapuzdrenie a viesť k krehkým testom [10].
Stručne povedané, zatiaľ čo obidve služby Whitebox slúžia podobným účelom, verzia Powermock je komplexnejšia a široko dostupná, zatiaľ čo verzia Mockito bola odstránená z dôvodu obáv z postupov testovania. Powermock's Whitebox je výkonným nástrojom na prístup a manipuláciu s vnútornými triednymi štátmi, ale mal by sa používať uvážlivo.
Citácie:[1] https://stackoverflow.com/questions/40280918/what-do-i-i-use-instead-of-whitebox-in-mockito-2-2--set-set-fields
[2] https://www.jaadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
[3] https://proandroiddev.com/Mockito-2-x-wower-powermock-migration-tips-and-tricks-p-ten-118c52ABD1D8
[4] https://johnmullins.co
[5] https://www.calsoflinc.com/blogs/unit-testing-mocko-powermockito.html
[6] https://www.jaadoc.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/