การใช้ Powermock กับ Mockito 5 และการกำหนดค่า `mock-maker-maker-inline 'เป็นไปได้ทางเทคนิค แต่เกี่ยวข้องกับการพิจารณาบางอย่างเนื่องจากวิธีการที่เครื่องมือเหล่านี้มีการโต้ตอบ
Powermock และ Mockito เข้ากันได้
Powermock ได้รับการออกแบบมาเพื่อขยายขีดความสามารถของเฟรมเวิร์กเยาะเย้ยเช่น Mockito โดยอนุญาตให้เยาะเย้ยวิธีการคงที่คลาสสุดท้ายและตัวสร้าง อย่างไรก็ตามการบูรณาการของ Powermock กับ Mockito นั้นมุ่งเน้นไปที่ Mockito รุ่นเก่าเป็นหลัก Powermock เวอร์ชัน 2.0.0 ขึ้นไปรองรับ Mockito 2.x แต่มีเอกสาร จำกัด เกี่ยวกับความเข้ากันได้กับ Mockito 5.0.0 ซึ่งใช้ `mock-maker-maker 'โดยค่าเริ่มต้น [1] [5]
Mockito 5 และ `mock-maker-inline '
Mockito 5.0.0 แนะนำ `mock-maker-inline` เป็นค่าเริ่มต้น` mockmaker 'ซึ่งเปิดใช้งานคุณสมบัติเช่นการเยาะเย้ยคลาสสุดท้ายและวิธีการคงที่ออกจากกล่อง การเปลี่ยนแปลงนี้ทำให้กระบวนการของการเยาะเย้ยคลาสที่ซับซ้อนเมื่อเทียบกับรุ่นก่อนหน้าซึ่งจำเป็นต้องมีการกำหนดค่าหรือการพึ่งพาเพิ่มเติม [9] [10]
การใช้ Powermock ด้วย `mock-maker-inline '
เมื่อใช้ Powermock ควบคู่ไปกับ Mockito 5 คุณอาจพบปัญหาเนื่องจากการใช้งานภายในของ Powermock และการมีปฏิสัมพันธ์กับ `mockmaker 'ของ Mockito Powermock ใช้ `mockmaker 'ของตัวเองซึ่งสามารถนำไปสู่ความขัดแย้งหากทั้ง Powermock และ Mockito พยายามใช้การใช้งาน` mockmaker' ที่แตกต่างกันพร้อมกัน [1] [2]
ในการใช้ Powermock กับ Mockito 5 และ `Mock-Maker-Maker-Inline` โดยทั่วไปคุณจะต้องกำหนดค่า Powermock เพื่อมอบหมายการดำเนินการเยาะเย้ยให้กับ Mockito ของ Mockito เมื่อจำเป็น อย่างไรก็ตามการกำหนดค่านี้อาจซับซ้อนและอาจไม่ได้รับการสนับสนุนอย่างเต็มที่หรือบันทึกไว้สำหรับทุกสถานการณ์
ขั้นตอนการกำหนดค่า
1. รวมถึงการพึ่งพา: ตรวจสอบให้แน่ใจว่าคุณมี Powermock และ Mockito เวอร์ชันที่ถูกต้องในโครงการของคุณ สำหรับ Powermock ให้ใช้เวอร์ชันเช่น `powermock-api-mockito2` และ` powermock-module-Junit4` สำหรับ Mockito ให้ใช้เวอร์ชัน 5.0.0 หรือใหม่กว่า [5] [9]
2. กำหนดค่า Powermock: คุณอาจต้องกำหนดค่า Powermock เพื่อทำงานกับ `mock-maker-maker-inline 'ของ Mockito สิ่งนี้อาจเกี่ยวข้องกับการตั้งค่าไฟล์การกำหนดค่าเพื่อมอบหมายการดำเนินการเยาะเย้ยของ Powermock ให้กับ Mockito เมื่อใช้ `mock-maker-inline '
3. การตั้งค่าการทดสอบ: ใช้ `@runwith (powermockrunner.class)` และ `@prepayfortest` คำอธิบายประกอบในคลาสทดสอบของคุณเพื่อเปิดใช้งานฟังก์ชันการทำงานของ Powermock
4. การเยาะเย้ย: ใช้ mockito สำหรับงานเยาะเย้ยและ powermock ส่วนใหญ่สำหรับคุณสมบัติเฉพาะเช่นวิธีคงที่เยาะเย้ยเมื่อจำเป็น
ปัญหาที่อาจเกิดขึ้น
-ความไม่ลงรอยกัน: `mockmaker 'ของ Powermock อาจขัดแย้งกับ` mock-mock-maker-maker' ของ Mockito ซึ่งนำไปสู่พฤติกรรมที่คาดเดาไม่ได้หากไม่ได้รับการกำหนดค่าอย่างเหมาะสม
- เอกสารที่ จำกัด : มีคำแนะนำที่ จำกัด ในการใช้ Powermock กับ Mockito 5 โดยเฉพาะดังนั้นคุณอาจต้องทดลองกับการกำหนดค่าที่แตกต่างกัน
โดยสรุปในขณะที่มันเป็นไปได้ทางเทคนิคที่จะใช้ Powermock กับ Mockito 5 และ `mock-maker-maker 'การตั้งค่าอาจมีความซับซ้อนและอาจต้องใช้การกำหนดค่าอย่างระมัดระวังเพื่อหลีกเลี่ยงความขัดแย้งระหว่างสองเฟรมเวิร์ก ขอแนะนำให้ใช้คุณสมบัติในตัวของ Mockito 5 สำหรับความต้องการที่เยาะเย้ยมากที่สุดและสำรอง Powermock สำหรับสถานการณ์เฉพาะที่จำเป็นต้องใช้ความสามารถที่เป็นเอกลักษณ์
การอ้างอิง:[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.mockmaker
[3] https://rieckpil.de/mock-java-constructors-and-their-object-creation-with-mockito/
[4] https://stackoverflow.com/questions/6036450/PowerMock-mockito-vs-mockito-Alone
[5] https://howtodoinjava.com/java/library/mock-testing-using-powermock-with-junit-and-mockito/
[6] https://groups.google.com/g/mockito/c/bly1pyabj94
[7] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[8] https://stackoverflow.com/questions/36536727/is-it-possible-to-use-mockito-with-kotlin-without-open-the-class/44284452
[9] https://www.infoq.com/news/2023/01/mockito-5/
[10] https://www.javacodegeeks.com/understanding-mockito-core-vs-mockito-inline.html
[11] https://powermock.github.io