Powermock Whitebox un Mockito balto kārba ir gan lietderības klases, ko izmanto, lai piekļūtu un manipulētu ar klašu iekšējiem stāvokļiem, taču tām ir atšķirīgas atšķirības to izcelsmē, funkcijās un lietošanas kontekstā.
Izcelsme un pieejamība
- Mockito Whitebox: Šī bija iekšējā klase Mockito, kas ļāva lietotājiem iestatīt objektu iekšējos stāvokļus. Tomēr tas tika noņemts no Mockito 2.x, pateicoties bažām par sliktas pārbaudes prakses veicināšanu un tāpēc, ka tā nebija paredzēta publiskai lietošanai [11]. Lietotāji, kuri paļāvās uz to, tika mudināti pāriet uz alternatīvām, piemēram, Powermock balto kārbu vai ieviest savas refleksijas utilītas [3].
- Powermock's WhiteBox: Šī ir daļa no Powermock bibliotēkas, kas paplašina Mockito iespējas, cita starpā ļaujot izsmiet privātas, statiskas un galīgās metodes [5]. Powermock WhiteBox nodrošina vienkāršotu refleksijas lietderību, kas paredzēta testiem, ļaujot piekļūt privātajiem biedriem un uzaicināt privātas metodes [2] [6].
funkcionalitāte
- Mockito WhiteBox (vēsturiskā): pirms tā noņemšanas Mockito WhiteBox ļāva lietotājiem iestatīt objektu iekšējos stāvokļus, izmantojot tādas metodes kā "setInternalstate". Tas bija noderīgi, lai ievadītu ņirgāšanos klasēs bez publiskiem seteriem.
- Powermock's Whitebox: piedāvā plašāku funkciju kopumu, ieskaitot:
- Piekļuve privātajiem dalībniekiem: tādas metodes kā `getInternalState` ļauj iegūt privāto lauka vērtības.
- Privātu metožu izsaukšana: “Invokemethod” metode var izsaukt privātas metodes, ieskaitot statiskas [4] [10].
- Powermock balto kārbu var izmantot privāto lauku iestatīšana: lai arī tas nav skaidri dokumentēts, var izmantot, lai iestatītu privātos laukus, izmantojot refleksiju, lai gan tas nav tā galvenais mērķis.
lietošanas konteksts
- Mockito WhiteBox: tā kā tas vairs nav pieejams Mockito 2.x, lietotājiem ieteicams izmantot alternatīvas, piemēram, Powermock's Whitebox vai Spring's `ReflectionTestutils`, ja piemērojams [1] [3].
- Powermock's WhiteBox: parasti tiek izmantots scenārijos, kur ir nepieciešama tieša piekļuve privātiem dalībniekiem vai metodēm, bieži vien mantotajā kodā vai pārbaudot sarežģītu loģiku, kuru nevar viegli reaģēt. Tomēr parasti ieteicams izvairīties no šādu komunālo pakalpojumu lietošanas, ja vien tas nav absolūti nepieciešams, jo tie var apiet iekapsulēšanu un izraisīt trauslus testus [10].
Rezumējot, kaut arī abi WhiteBox Utilities kalpo līdzīgiem mērķiem, Powermock versija ir visaptverošāka un plaši pieejama, turpretī Mockito versija tika noņemta bažu dēļ par testēšanas praksi. Powermock's WhiteBox ir spēcīgs rīks, lai piekļūtu un manipulētu ar iekšējām klases stāvokļiem, bet tas būtu jāizmanto saprātīgi.
Atsauces:[1.]
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitbox.html
[3] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-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-capsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/