Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Vilka är de viktigaste skillnaderna mellan PowerMocks whitebox och Mockitos whitebox


Vilka är de viktigaste skillnaderna mellan PowerMocks whitebox och Mockitos whitebox


PowerMocks whitebox och Mockitos whitebox är båda verktygsklasser som används för åtkomst och manipulering av interna tillstånd i klasser, men de har distinkta skillnader i deras ursprung, funktionalitet och användningssammanhang.

Ursprung och tillgänglighet

- Mockitos whitebox: Detta var en intern klass inom Mockito som gjorde det möjligt för användare att ställa in interna föremål. Det togs emellertid bort från Mockito 2.x på grund av oro över att främja dålig testning och eftersom det inte var avsett för allmän användning [11]. Användare som förlitade sig på det uppmanades att byta till alternativ som PowerMocks whitebox eller implementera sina egna reflektionsverktyg [3].

- PowerMocks whitebox: Detta är en del av PowerMock -biblioteket, som utökar Mockitos kapacitet genom att tillåta hån av privata, statiska och slutliga metoder, bland andra funktioner [5]. PowerMocks whitebox tillhandahåller ett förenklat reflektionsverktyg avsett för tester, vilket möjliggör tillgång till privata medlemmar och åkallande av privata metoder [2] [6].

Funktionalitet

- Mockitos whitebox (historisk): Innan dess borttagning tillät Mockitos whitebox användare att ställa in interna tillstånd med objekt med metoder som `setternalstate '. Detta var användbart för att injicera håna i klasser utan offentliga bosättare.

- PowerMocks whitebox: erbjuder en bredare uppsättning funktioner, inklusive:
- Åtkomst till privata medlemmar: Metoder som `getInternalState` Tillåter hämtning av privata fältvärden.
- Åkallande privata metoder: Metoden "Inokemethod" kan kalla privata metoder, inklusive statiska [4] [10].
- Ställa in privata fält: Även om de inte uttryckligen dokumenteras, kan PowerMocks whitebox användas för att ställa in privata fält genom reflektion, även om detta inte är dess primära syfte.

Användningskontext

- Mockitos whitebox: Eftersom den inte längre är tillgänglig i Mockito 2.x rekommenderas användare att använda alternativ som PowerMocks whitebox eller Spring's `ReflectionTestutils` om tillämpligt [1] [3].

- PowerMocks whitebox: Används vanligtvis i scenarier där direkt tillgång till privata medlemmar eller metoder är nödvändig, ofta i äldre kod eller vid testning av komplex logik som inte lätt kan återfaktas. Det rekommenderas emellertid generellt att undvika att använda sådana verktyg såvida inte absolut nödvändigt, eftersom de kan kringgå inkapsling och leda till spröda tester [10].

Sammanfattningsvis, medan båda whitebox -verktygen tjänar liknande syften, är PowerMocks version mer omfattande och allmänt tillgänglig, medan Mockitos version togs bort på grund av oro över testmetoder. PowerMocks whitebox är ett kraftfullt verktyg för åtkomst och manipulering av interna klassstater men bör användas på ett klokt sätt.

Citeringar:
]
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitbox.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/whitbox.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/