Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Care sunt principalele diferențe între cutia albă a lui Powermock și Mockito's Whitebox


Care sunt principalele diferențe între cutia albă a lui Powermock și Mockito's Whitebox


Cutia albă a lui PowerMock și Mockito sunt ambele clase de utilitate utilizate pentru accesarea și manipularea stărilor interne ale claselor, dar au diferențe distincte în originile, funcționalitățile și contextele de utilizare.

Originea și disponibilitatea

- Cutia albă a lui Mockito: Aceasta a fost o clasă internă din Mockito care a permis utilizatorilor să stabilească stări interne ale obiectelor. Cu toate acestea, a fost eliminat din Mockito 2.X din cauza îngrijorărilor legate de promovarea practicilor de testare proaste și pentru că nu a fost destinată utilizării publice [11]. Utilizatorii care s -au bazat pe ea au fost încurajați să treacă la alternative precum PowerMock's Whitebox sau să implementeze propriile utilități de reflecție [3].

- PowerMock's Whitebox: Aceasta face parte din Biblioteca Powermock, care extinde capacitățile Mockito, permițând batjocurarea metodelor private, statice și finale, printre alte caracteristici [5]. Cutia albă a PowerMock oferă o utilitate de reflecție simplificată destinată testelor, permițând accesul la membrii privați și invocarea metodelor private [2] [6].

Funcționalitate

- Mockito's Whitebox (istoric): Înainte de înlăturarea sa, cutia albă a lui Mockito a permis utilizatorilor să stabilească stări interne ale obiectelor folosind metode precum „setinternalState”. Acest lucru a fost util pentru injectarea batjocurărilor în clase fără așezători publici.

- PowerMock's Whitebox: oferă un set mai larg de funcționalități, inclusiv:
- Accesarea membrilor privați: metode precum `getInternalState` permit regăsirea valorilor de câmp privat.
- Invocarea metodelor private: metoda „InvokeMethod” poate apela metode private, inclusiv cele statice [4] [10].
- Setarea câmpurilor private: Deși nu este documentat în mod explicit, cutia albă a lui Powermock poate fi utilizată pentru a seta câmpuri private prin reflecție, deși acesta nu este scopul său principal.

Contextul de utilizare

- Cutia albă a lui Mockito: Deoarece nu mai este disponibilă în Mockito 2.X, utilizatorii sunt sfătuiți să utilizeze alternative precum PowerMock Whitebox sau „ReflectionTestUtils” de la PowerMock sau „ReflectionTestutils”, dacă este cazul [1] [3].

- PowerMock's Whitebox: utilizat în mod obișnuit în scenarii în care accesul direct la membrii privați sau la metodele este necesar, adesea în cod moștenitor sau la testarea logicii complexe care nu pot fi ușor refactate. Cu toate acestea, în general, este recomandat să evitați utilizarea unor astfel de utilități, cu excepția cazului în care sunt absolut necesare, deoarece acestea pot ocoli încapsularea și pot duce la teste fragile [10].

În rezumat, în timp ce ambele utilități Whitebox servesc scopuri similare, versiunea PowerMock este mai cuprinzătoare și mai disponibilă, în timp ce versiunea Mockito a fost eliminată din cauza preocupărilor cu privire la practicile de testare. Cutia albă a lui PowerMock este un instrument puternic pentru accesarea și manipularea statelor de clasă internă, dar ar trebui utilizat în mod judicios.

Citări:
[1] https://stackoverflow.com/questions/40280918/what-do-i-use-instead-of-hitebox---mockito-2-2-to-set-câmpuri
[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-pips-and-trks-top-ten-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-encapsulare
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/