เมื่อใช้ Powermock กับ Mockito 2.x ข้อยกเว้นและปัญหาทั่วไปหลายประการอาจเกิดขึ้นได้เนื่องจากปัญหาความเข้ากันได้และการเปลี่ยนแปลงใน Mockito API นี่คือข้อยกเว้นที่พบบ่อยที่สุดและวิธีการที่อยู่:
1. noclassdeffounderror: org.mockito.cglib.proxy.methodinterceptor **
ข้อยกเว้นนี้เกิดขึ้นเมื่อใช้ส่วนขยาย Powermock API ที่ไม่ถูกต้อง ส่วนขยาย `powermock-api-mockito` ไม่ทำงานกับ Mockito 2.x ซึ่งนำไปสู่ข้อผิดพลาดนี้ ในการแก้ไขคุณควรใช้ส่วนขยาย `powermock-api-mockito2` แทน [1] [2]2. Mockito และ Powermock รุ่นที่เข้ากันไม่ได้
การใช้ Mockito และ Powermock รุ่นที่เข้ากันไม่ได้สามารถนำไปสู่ข้อยกเว้นต่าง ๆ ตัวอย่างเช่น Powermock 1.6.5 มีการสนับสนุนการทดลองสำหรับ Mockito 2.x แต่ไม่น่าเชื่อถือ ตรวจสอบให้แน่ใจว่าคุณใช้เวอร์ชันที่เข้ากันได้เช่น Powermock 1.7.0 RC2 กับ Mockito 2.1.0 [1] [2]3. unglegalAccessError กับ Mockito 2.7.1 **
เมื่อใช้ Powermock 1.6.5 หรือ 1.7.0 RC2 กับ Mockito 2.7.1 คุณอาจพบ `ungleclaccesserror ' ปัญหานี้ได้รับการแก้ไขโดยใช้ Powermock 1.7.0 RC4 [1] [4]4. RuntimeExceptionProxy ใน Mockito 2.x พร้อม Powermock **
ใน Mockito 2.x พร้อม Powermock ข้อยกเว้นดั้งเดิมถูกห่อหุ้มเป็น `RuntimeExceptionProxy` สิ่งนี้ต้องมีการแก้ไขคำอธิบายประกอบการทดสอบจาก `@Test (คาดว่า = someException.class)` ถึง `@Test (คาดว่า = exception.class)` เพื่อจับข้อยกเว้นที่ห่อหุ้ม [1]5. FieldNotFoundException กับ Whitebox ของ Powermock **
Mockito 2.x ลบ WhiteBox ดังนั้นการใช้ WhiteBox ของ Powermock สามารถนำไปสู่ `FieldnotFoundException` หากสิ่งนี้เกิดขึ้นให้พิจารณาการเขียนการใช้งานของคุณเองหรือ refactoring รหัสของคุณเพื่อการทดสอบที่ดีขึ้น [1] [2]6. ยังไม่เสร็จสิ้นการรับรู้ **
ข้อยกเว้นนี้สามารถเกิดขึ้นได้แม้ว่า Stubbing ดูเหมือนจะถูกต้อง ตรวจสอบให้แน่ใจว่าไม่มีการสร้างสรรค์แบบอินไลน์ในวิธีการที่ไม่ดีและการสต็อกทั้งหมดเสร็จสมบูรณ์ด้วยวิธีการเช่น `thenreturn ()` หรือ `thenthrow ()` [3]7. ปัญหาความเข้ากันได้กับรุ่น mockito ใหม่ **
Powermock อาจไม่เข้ากันได้กับรุ่น Mockito รุ่นใหม่เช่น Mockito 4.0.0 ในกรณีเช่นนี้การใช้ mockito รุ่นเก่าที่เข้ากันได้กับ Powermock อาจจำเป็น [10]โดยรวมแล้วการย้ายไปยัง Mockito 2.x จาก Mockito 1.x ด้วย Powermock เกี่ยวข้องกับการจัดการกับปัญหาความเข้ากันได้เหล่านี้และการทดสอบที่อาจเกิดขึ้นใหม่เพื่อหลีกเลี่ยงการใช้ Powermock โดยสิ้นเชิง [1] [4]
การอ้างอิง:[1] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-ten-TEN-TEN-118C52ABD1D8
[2] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-tips-and-tricks
[3] https://stackoverflow.com/questions/33441494/mockito-powermockito-weird-stubbing-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/Question
[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