A PowerMock's WhiteBox és a Mockito WhiteBox egyaránt hasznos osztályok, amelyeket az osztályok belső állapotának elérésére és manipulálására használnak, ám ezeknek különbsége van eredetükben, funkcióikban és használati kontextusukban.
eredet és elérhetőség
- Mockito's WhiteBox: Ez egy belső osztály volt a Mockito -n belül, amely lehetővé tette a felhasználók számára, hogy beállítsák a belső objektumok állapotát. Ezt azonban eltávolították a Mockito 2.x -ból a rossz tesztelési gyakorlatok előmozdításával kapcsolatos aggodalmak miatt, és mivel nem nyilvános felhasználásra szánták [11]. Azokra a felhasználókat arra ösztönözték, hogy váltsanak olyan alternatívákra, mint például a PowerMock's Whitebox, vagy hajtsák végre a saját reflexiós segédprogramjaikat [3].
- A PowerMock's WhiteBox: Ez a PowerMock könyvtár része, amely kiterjeszti a Mockito képességeit azáltal, hogy lehetővé teszi a privát, statikus és végső módszerek gúnyolódását, többek között [5]. A PowerMock's WhiteBox egyszerűsített reflexiós segédprogramot biztosít a tesztekhez, lehetővé téve a magán tagokhoz való hozzáférést és a magán módszerek meghívását [2] [6].
Funkcionitás
- Mockito's WhiteBox (történelmi): Az eltávolítása előtt a Mockito WhiteBox lehetővé tette a felhasználók számára, hogy a belső objektumok belső állapotát beállítsák olyan módszerekkel, mint a „setinternalState”. Ez hasznos volt a gúnyok injektálására az osztályokba nyilvános beállítók nélkül.
- A PowerMock's WhiteBox: A funkciók szélesebb körét kínálja, beleértve:
- A magán tagok elérése: olyan módszerek, mint a „getInternalState”, lehetővé teszik a magán mező értékeinek visszakeresését.
- Privát módszerek meghívása: Az „Invokemethod” módszer magán módszereket hívhat, beleértve a statikus módszereket [4] [10].
- Magán mezők beállítása: Noha nem kifejezetten dokumentálva, a PowerMock WhiteBox felhasználható a magán mezők reflexió révén történő beállítására, bár ez nem az elsődleges célja.
Használati kontextus
- Mockito's WhiteBox: Mivel ez már nem érhető el a Mockito 2.x -ben, a felhasználóknak javasoljuk, hogy olyan alternatívákat használjanak, mint a PowerMock's WhiteBox vagy a Spring's ReflectionTeStutils ", ha alkalmazható [1] [3].
- A PowerMock's WhiteBox: Általában olyan forgatókönyvekben használják, ahol közvetlen hozzáférésre van szükség a magántagokhoz vagy módszerekhez, gyakran a régi kódban vagy a komplex logika tesztelése során, amelyet nem lehet könnyen újraindítani. Általában azonban ajánlott elkerülni az ilyen segédprogramokat, hacsak nem feltétlenül szükséges, mivel ezek megkerülhetik a kapszulázást és törékeny tesztekhez vezethetnek [10].
Összefoglalva: bár mindkét WhiteBox segédprogram hasonló célokat szolgál, a PowerMock verziója átfogóbb és szélesebb körben elérhető, míg a Mockito verzióját eltávolították a tesztelési gyakorlatokkal kapcsolatos aggodalmak miatt. A PowerMock's WhiteBox hatékony eszköz a belső osztályállamok eléréséhez és manipulálásához, de meggondolatlanul kell használni.
Idézetek:[1] https://stackoverflow.com/questions/40280918/what-do-i-use-instead-of-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-overmock-migration-dips- és-tricks-top-top-118c52abd1d8
[4] https://johnmullins.co
[5] https://www.calsoftinc.com/blogs/unit-stesting-mockito-powermockito.html
[6] https://www.javadoc.io/doc/org.powermock/powermock-reflect/latest/org/powermock/refliekt/whitebox.html
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9] https://www.lambdatest.com/automation-stesting-advisor/selenium/classes/org.powermock.reflect.whitebox
[10] https://github.com/powermock/powermock/wiki/bypass-encapsuláció
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-forpowermock/