Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Vilka är de vanliga frågorna när du använder PowerMock med Mockito


Vilka är de vanliga frågorna när du använder PowerMock med Mockito


När du använder PowerMock med Mockito kan flera vanliga problem uppstå på grund av deras integrationskomplexitet. Här är några detaljerade förklaringar av dessa frågor:

Inkompatibla versioner

En av de främsta utmaningarna är att säkerställa att versionerna av Mockito och PowerMock är kompatibla. Till exempel är PowerMock version 1.7.0 RC2 kompatibel med Mockito version 2.1.0 [1] [4]. Att använda inkompatibla versioner kan leda till fel som `java.lang.noclassdeffounderror` eller` java.lang.classnotfoundexception` eftersom powermock förlitar sig på interna mockito -apis som förändras mellan versionerna [1] [4].

Mockito API -tillägg

PowerMock kräver rätt Mockito API -förlängning för att fungera korrekt med Mockito 2.x. Förlängningen `PowerMock-Api-Mockito 'fungerar inte med Mockito 2.x och kommer att orsaka undantag som` java.lang.noclassdeffounderror: org/mockito/cglib/proxy/methodInterceptor'. Istället bör du använda `powermock-api-mockito2` för att undvika dessa problem [1] [4].

Whitebox Borttagning

Mockito 2.x innehåller inte längre whitebox -funktionen, som användes för att ställa in internt tillstånd. PowerMock tillhandahåller sin egen whitebox, men att använda den kan det leda till frågor som `org.powermock.reflect.exceptions.fieldnotfoundexception`. Om PowerMocks whitebox inte fungerar för dig, överväg att skriva din egen implementering [1] [4].

Mockmaker -konfiguration

PowerMock implementerar sin egen "Mockmaker", som kan komma i konflikt med Mockitos "Mock-Maker-Inline" om båda är närvarande i klassvägen. För att lösa detta kan du konfigurera PowerMock för att delegera till Mockitos "Mockmaker" genom att ställa in "Mockito.Mock-Maker-class = Mock-Maker-Inline" i en konfigurationsfil [3].

Undantagshantering

När du använder PowerMock med Mockito 2.x lindas ursprungliga testundersökningar som `cuntimeExceptionProxy`. Detta kräver modifiering av testanteckningar från `@test (förväntat = någonsexception.class)` till `@test (förväntat = undantag.class)` för att fånga de inslagna undantagen [4].

Integration med andra ramverk

PowerMock kan komma i konflikt med andra ramar eller bibliotek, såsom vår eller vissa Java -versioner, på grund av dess bytekodmanipulationstekniker [9]. Detta kan leda till långsammare testutförande och ytterligare komplexitet vid hantering av beroenden [9].

Komplexitet och prestanda

PowerMocks avancerade funktioner har ökad komplexitet och långsammare testutförande på grund av bytekodmanipulation. Detta kan göra tester svårare att installera och underhålla jämfört med att använda Mockito ensam [9].

Sammantaget, medan PowerMock erbjuder kraftfulla hånfunktioner, särskilt för äldre kod eller komplexa statiska metoder, kräver det noggrann installation och hantering för att undvika integrationsproblem med mockito och andra ramverk.

Citeringar:
[1] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-tips-and-tricks
[2] https://stackoverflow.com/questions/43669909/powermock-fails-tests
[3] https://github.com/powermock/powermock/wiki/mockito
]
[5] https://github.com/powermock/powermock/issues/811
[6] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[7] https://github.com/mockk/mockk/issues/79
]
]