Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jaké jsou běžné výjimky při používání PowerMock s Mockito 2.x


Jaké jsou běžné výjimky při používání PowerMock s Mockito 2.x


Při použití PowerMock s Mockito 2.x může nastat několik běžných výjimek a problémů v důsledku problémů s kompatibilitou a změnami v API Mockito. Zde jsou některé z nejběžnějších výjimek a jak je řešit:

1. NoclassdeffoundError: org.mockito.cglib.proxy.methodinterceptor **

K této výjimce dochází při použití nesprávného rozšíření API PowerMock. Prodloužení `PowerMock-Api-Mockito` nefunguje s Mockito 2.x, což vede k této chybě. Chcete-li to opravit, měli byste místo toho použít prodloužení `PowerMock-Api-MockIto2` [1] [2].

2. nekompatibilní verze Mockito a Powermock **

Použití nekompatibilních verzí Mockito a PowerMock může vést k různým výjimkám. Například PowerMock 1.6.5 má experimentální podporu pro Mockito 2.x, ale není to spolehlivé. Ujistěte se, že používáte kompatibilní verze, jako je PowerMock 1.7.0 RC2 s Mockito 2.1.0 [1] [2].

3. IllegalAccessError s Mockito 2.7.1 **

Při používání PowerMock 1.6.5 nebo 1.7.0 RC2 s Mockito 2.7.1 se můžete setkat s `IllegalAccesSerror`. Tento problém je vyřešen pomocí PowerMock 1.7.0 RC4 [1] [4].

4. RuntimeexceptionProxy in Mockito 2.x s PowerMock **

V Mockito 2.x s PowerMock jsou původní výjimky zabaleny jako `runtimeexceptionProxy`. To vyžaduje úpravu testovacích anotací z `@Test (očekávané = someexception.class)` do `@test (očekávaný = výjimka.class)` zachytit zabalené výjimky [1].

5. FieldNotFoundException s Whiteboxem PowerMock **

Mockito 2.x odstraněn Whitebox, takže pomocí Whiteboxu PowerMock může vést k „FieldNotFoundException“. Pokud k tomu dojde, zvažte napsání vlastní implementace nebo refaktorování kódu pro lepší testovatelnost [1] [2].

6. UnfinishstubbingException **

K této výjimce může dojít, i když se zdá, že strnivování je správné. Ujistěte se, že v rámci pruhovacích metod neexistují žádné vložené simulované výtvory a že veškeré strniště je správně dokončeno metodami jako `ThenReturn ()` nebo `thenthrow ()` [3].

7. Problémy s kompatibilitou s novějšími verzemi Mockito **

PowerMock nemusí být kompatibilní s novějšími verzemi Mockito, například Mockito 4.0.0. V takových případech může být nutné s použitím starší verze Mockito, která je kompatibilní s PowerMock [10].

Celkově, migrace na Mockito 2.x z Mockito 1.x s PowerMock zahrnuje řešení těchto problémů s kompatibilitou a potenciálně refaktoringových testů, aby se zabránilo úplnému použití PowerMock [1] [4].

Citace:
[1] https://proandroiddev.com/mockito-2-x-over-powermock-sigration-tips-and-tricks-top --118C52ABD1D8
[2] https://dzone.com/articles/mockito-2x-over-powerMock-top-10-tips-and-tricks
[3] https://stackoverflow.com/questions/33441494/mockito-powerMockito-teird-tubbing-Exception
[4] https://proandroiddev.com/mockito-2-X-sigration-session-DroidCon-2018-BA70619F3811
[5] https://github.com/powermock/powermock/issues/706
[6] https://github.com/mockito/mockito/issues/1606
[7] https://stackoverflow.com/questions/69394651/cannot-tun-powermock-sue-to-unexead-exception-and-org-mockITo-Exceptions-m
[8] https://stackoverflow.com/questions/61208743/PowerMock-with-mockito-dependency-issue
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109