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
)