Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hva er de viktigste forskjellene mellom Powermocks Whitebox og Mockitos Whitebox


Hva er de viktigste forskjellene mellom Powermocks Whitebox og Mockitos Whitebox


Powermocks Whitebox og Mockitos Whitebox er begge verktøyklasser som brukes til å få tilgang til og manipulere interne tilstander av klasser, men de har tydelige forskjeller i deres opprinnelse, funksjonalitet og brukskontekster.

Opprinnelse og tilgjengelighet

- Mockitos Whitebox: Dette var en intern klasse innen Mockito som tillot brukere å sette interne tilstander av objekter. Imidlertid ble den fjernet fra Mockito 2.x på grunn av bekymring for å fremme dårlig testingspraksis og fordi det ikke var beregnet på offentlig bruk [11]. Brukere som stolte på det ble oppfordret til å bytte til alternativer som Powermocks Whitebox eller implementere sine egne refleksjonsverktøy [3].

- Powermocks Whitebox: Dette er en del av Powermock -biblioteket, som utvider Mockitos evner ved å tillate hån mot private, statiske og endelige metoder, blant andre funksjoner [5]. Powermocks Whitebox gir et forenklet refleksjonsverktøy beregnet på tester, noe som muliggjør tilgang til private medlemmer og påkallelse av private metoder [2] [6].

Funksjonalitet

- Mockitos Whitebox (historisk): Før den fjerning, tillot Mockitos Whitebox brukere å angi interne tilstander av objekter ved å bruke metoder som `SetInternalState`. Dette var nyttig for å injisere hån i klasser uten offentlige setters.

- Powermocks Whitebox: tilbyr et bredere sett med funksjonaliteter, inkludert:
- Å få tilgang til private medlemmer: Metoder som `GetInternalState` Tillat henting av private feltverdier.
- Påkalle private metoder: "Invokemethod` -metoden kan kalle private metoder, inkludert statiske [4] [10].
- Innstilling av private felt: Selv om det ikke er eksplisitt dokumentert, kan Powermocks Whitebox brukes til å sette private felt gjennom refleksjon, selv om dette ikke er dets primære formål.

Brukskontekst

- Mockitos Whitebox: Siden den ikke lenger er tilgjengelig i Mockito 2.x, anbefales brukerne å bruke alternativer som Powermocks Whitebox eller Springs `ReflectionTestils` hvis aktuelt [1] [3].

- Powermocks Whitebox: vanligvis brukt i scenarier der direkte tilgang til private medlemmer eller metoder er nødvendig, ofte i arvkode eller når du tester kompleks logikk som ikke lett kan refactores. Imidlertid anbefales det generelt å unngå å bruke slike verktøy med mindre de er absolutt nødvendige, da de kan omgå innkapsling og føre til sprø tester [10].

Oppsummert, mens begge Whitebox -verktøyene tjener lignende formål, er Powermocks versjon mer omfattende og allment tilgjengelig, mens Mockitos versjon ble fjernet på grunn av bekymring for testpraksis. Powermocks Whitebox er et kraftig verktøy for å få tilgang til og manipulere interne klassestater, men bør brukes på en god måte.

Sitasjoner:
[1] https://stackoverflow.com/questions/40280918/what-do-i-use-instead-of-whitebox-in-mockito-2-2-to-set-felt
[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-tips-and-trick-top-gen-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-encapsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/