Saat menggunakan PowerMock dengan Mockito 2.x, beberapa pengecualian dan masalah umum dapat muncul karena masalah kompatibilitas dan perubahan dalam API mockito. Berikut adalah beberapa pengecualian yang paling umum dan cara mengatasinya:
1. NoClassDeffoundError: org.mockito.cglib.proxy.methodInterceptor **
Pengecualian ini terjadi saat menggunakan ekstensi API Powermock yang salah. Ekstensi `powermock-api-mockito` tidak berfungsi dengan mockito 2.x, yang mengarah ke kesalahan ini. Untuk memperbaikinya, Anda harus menggunakan ekstensi `PowerMock-API-Mockito2` sebagai gantinya [1] [2].2. Versi mockito dan powermock yang tidak kompatibel **
Menggunakan versi mockito dan powermock yang tidak kompatibel dapat menyebabkan berbagai pengecualian. Misalnya, Powermock 1.6.5 memiliki dukungan eksperimental untuk mockito 2.x, tetapi tidak dapat diandalkan. Pastikan Anda menggunakan versi yang kompatibel, seperti PowerMock 1.7.0 RC2 dengan mockito 2.1.0 [1] [2].3. IllegalAccessError dengan mockito 2.7.1 **
Saat menggunakan PowerMock 1.6.5 atau 1.7.0 RC2 dengan mockito 2.7.1, Anda mungkin menemukan `ilegalAccessError`. Masalah ini diselesaikan dengan menggunakan PowerMock 1.7.0 RC4 [1] [4].4. RunimeExceptionProxy di mockito 2.x dengan powermock **
Dalam mockito 2.x dengan powermock, pengecualian asli dibungkus sebagai `runtimeExceptionproxy`. Ini membutuhkan pengubah anotasi tes dari `@test (diharapkan = someException.class)` ke `@test (diharapkan = pengecualian.class)` untuk menangkap pengecualian yang dibungkus [1].5. FieldNotFoundException dengan PowerMock's Whitebox **
Mockito 2.x menghapus Whitebox, jadi menggunakan Whitebox PowerMock dapat menyebabkan `fieldnotfoundException`. Jika ini terjadi, pertimbangkan untuk menulis implementasi Anda sendiri atau refactoring kode Anda untuk testabilitas yang lebih baik [1] [2].6. UnfinishedStubbingException **
Pengecualian ini dapat terjadi bahkan ketika para rintisan tampak benar. Pastikan bahwa tidak ada kreasi tiruan inline dalam metode yang membumbui dan bahwa semua stubbing diselesaikan dengan benar dengan metode seperti `ThenTeturn ()` atau `thenthrow ()` [3].7. Masalah kompatibilitas dengan versi mockito yang lebih baru **
Powermock mungkin tidak kompatibel dengan versi mockito yang lebih baru, seperti mockito 4.0.0. Dalam kasus seperti itu, menggunakan versi mockito yang lebih lama yang kompatibel dengan PowerMock mungkin diperlukan [10].Secara keseluruhan, bermigrasi ke Mockito 2.x dari Mockito 1.x dengan PowerMock melibatkan mengatasi masalah kompatibilitas ini dan berpotensi refactoring tes untuk menghindari penggunaan PowerMock sama sekali [1] [4].
Kutipan:[1] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-18c52abd1d8
[2] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-tips-and-tricks
[3] https://stackoverflow.com/questions/33441494/mockito-powermockito-weird-tubbing-exception
[4] https://proandroiddev.com/mockito-2-x-migration-session-recording-droidcon-uk-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-run-powermock-due-to-unexpected-exception-and-org-mockito-exceptions-m
[8] https://stackoverflow.com/questions/61208743/powermock-with-mockito-dependencies-issue
[9] https://groups.google.com/g/powermock/c/3g5z_t1rdzq
[10] https://github.com/powermock/powermock/issues/1109