Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvad er de almindelige problemer, når du bruger Powermock med Mockito


Hvad er de almindelige problemer, når du bruger Powermock med Mockito


Når du bruger Powermock med Mockito, kan der opstå flere almindelige problemer på grund af deres integrationskompleksiteter. Her er nogle detaljerede forklaringer på disse spørgsmål:

Inkompatible versioner

En af de primære udfordringer er at sikre, at versioner af Mockito og Powermock er kompatible. F.eks. Er PowerMock version 1.7.0 RC2 kompatibel med Mockito version 2.1.0 [1] [4]. Brug af inkompatible versioner kan føre til fejl såsom `java.lang.noclassDeffoundError 'eller` java.lang.classnotfoundException', fordi PowerMock er afhængig af interne mockito -API'er, der ændrer sig mellem versioner [1] [4].

Mockito API -udvidelser

Powermock kræver, at den korrekte Mockito API -udvidelse fungerer korrekt med Mockito 2.x. Udvidelsen af ​​`PowerMock-Api-Mockito` fungerer ikke med Mockito 2.x og vil forårsage undtagelser som` java.lang.noclassDeffoundError: org/Mockito/CGLIB/Proxy/Methodinterceptor`. I stedet skal du bruge `PowerMock-Api-Mockito2 'for at undgå disse problemer [1] [4].

Whitebox Fjernelse

Mockito 2.x inkluderer ikke længere Whitebox -funktionen, der blev brugt til at indstille interne tilstande af objekter. Powermock leverer sin egen whitebox, men at bruge den kan føre til problemer som `org.powermock.reflect.exceptions.fieldNotFoundException '. Hvis Powermocks Whitebox ikke fungerer for dig, kan du overveje at skrive din egen implementering [1] [4].

Mockmaker -konfiguration

Powermock implementerer sin egen 'mockmaker', som kan komme i konflikt med Mockitos 'mock-maker-inline', hvis begge er til stede i ClassPath. For at løse dette kan du konfigurere PowerMock til at delegere til Mockitos 'mockmaker' ved at indstille 'mockito.mock-maker-class = mock-maker-inline' i en konfigurationsfil [3].

Undtagelseshåndtering

Når du bruger PowerMock med Mockito 2.x, indpakkes originale test undtagelser som `RuntimeExceptionProxy '. Dette kræver ændring af testnotationer fra `@test (forventet = SomeException.class)` til `@test (forventet = undtagelse.class)` for at fange de indpakkede undtagelser [4].

Integration med andre rammer

Powermock kan komme i konflikt med andre rammer eller biblioteker, såsom forår eller visse Java -versioner, på grund af dens bytekodemanipulationsteknikker [9]. Dette kan føre til langsommere testudførelse og yderligere kompleksitet i styring af afhængigheder [9].

Kompleksitet og ydeevne

Powermocks avancerede funktioner leveres med øget kompleksitet og langsommere testudførelse på grund af bytecode -manipulation. Dette kan gøre testene vanskeligere at konfigurere og vedligeholde sammenlignet med at bruge Mockito alene [9].

Samlet set, mens PowerMock tilbyder kraftige hånlige kapaciteter, især for ældre kode eller komplekse statiske metoder, kræver det omhyggelig opsætning og styring for at undgå integrationsproblemer med Mockito og andre rammer.

Citater:
)
[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
[8] https://objectcomputing.com/resources/publications/sett/september-2010-mockito-integration-testing-aerier
)