Powermocks Whitebox og Mockitos Whitebox er begge brugsklasser, der bruges til at få adgang til og manipulere interne klasser, men de har forskellige forskelle i deres oprindelse, funktionaliteter og brugskontekster.
Oprindelse og tilgængelighed
- Mockitos Whitebox: Dette var en intern klasse inden for Mockito, der gjorde det muligt for brugere at indstille interne tilstande af objekter. Imidlertid blev det fjernet fra Mockito 2.x på grund af bekymring for at fremme dårlig testpraksis, og fordi det ikke var beregnet til offentlig brug [11]. Brugere, der stolede på det, blev opfordret til at skifte til alternativer som Powermocks Whitebox eller implementere deres egne refleksionsværktøjer [3].
- Powermocks Whitebox: Dette er en del af PowerMock -biblioteket, der udvider Mockitos evner ved at tillade hån af private, statiske og endelige metoder, blandt andre funktioner [5]. Powermocks Whitebox giver et forenklet reflektionsværktøj beregnet til test, der muliggør adgang til private medlemmer og påkaldelse af private metoder [2] [6].
funktionalitet
- Mockitos Whitebox (historisk): Før dens fjernelse gjorde det muligt for Mockitos Whitebox brugere at indstille interne tilstande af objekter ved hjælp af metoder som `SetInternalState '. Dette var nyttigt til at injicere hån i klasser uden offentlige sættere.
- Powermocks Whitebox: tilbyder et bredere sæt funktionaliteter, herunder:
- Adgang til private medlemmer: Metoder som `GetInternalState` tillader hentning af private feltværdier.
- Påkaldelse af private metoder: Metoden `Invokemethod 'kan kalde private metoder, herunder statiske [4] [10].
- Indstilling af private felter: Selvom det ikke eksplicit er dokumenteret, kan Powermocks Whitebox bruges til at indstille private felter gennem refleksion, skønt dette ikke er dets primære formål.
Brugskontekst
- Mockitos Whitebox: Da det ikke længere er tilgængeligt i Mockito 2.x, tilrådes brugere at bruge alternativer som Powermocks Whitebox eller Spring's `ReflectionTestutils ', hvis relevant [1] [3].
- Powermocks Whitebox: Typisk brugt i scenarier, hvor direkte adgang til private medlemmer eller metoder er nødvendig, ofte i ældre kode eller når man tester kompleks logik, der ikke let kan refaktoreres. Imidlertid anbefales det generelt at undgå at bruge sådanne værktøjer, medmindre de er absolut nødvendige, da de kan omgå indkapsling og føre til sprøde test [10].
Sammenfattende, mens begge Whitebox -værktøjer tjener lignende formål, er Powermocks version mere omfattende og bredt tilgængelig, mens Mockitos version blev fjernet på grund af bekymring for testpraksis. Powermocks Whitebox er et kraftfuldt værktøj til at få adgang til og manipulere interne klassestater, men bør bruges med omtanke.
Citater:)
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
)
[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-test-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/