Powermock และ Mockito ใช้สำหรับการเยาะเย้ยใน Java แต่พวกเขามีจุดประสงค์ที่แตกต่างกันและมีคุณสมบัติที่แตกต่างกันโดยเฉพาะอย่างยิ่งในวิธีที่พวกเขาจัดการกับการเยาะเย้ยผ่านการใช้งาน `mockmaker 'ของพวกเขา
Mockmaker ของ Powermock
Powermock ขยายห้องสมุดจำลองอื่น ๆ เช่น EasyMock และ Mockito โดยให้ความสามารถที่ทรงพลังยิ่งขึ้น มันใช้การจัดการ classloader และ bytecode ที่กำหนดเองเพื่อเปิดใช้งานการเยาะเย้ยของวิธีการคงที่ตัวสร้างคลาสและวิธีการสุดท้ายวิธีการส่วนตัวและการกำจัด initializers แบบคงที่ [4] [9] `mockmaker 'ของ Powermock ถูกนำมาใช้โดยคลาส` Powermockmaker' ซึ่งผู้แทนเรียกไปยังอีก `mockmaker 'หากจำเป็น สิ่งนี้ช่วยให้ Powermock ทำงานร่วมกับกรอบการเยาะเย้ยอื่น ๆ โดยไม่มีความขัดแย้งหากมีการกำหนดค่าอย่างถูกต้อง [7]
วิธีการของ Powermock นั้นมีการรุกรานมากขึ้นซึ่งต้องใช้การจัดการแบบ bytecode เพื่อให้ได้ความสามารถในการเยาะเย้ยขั้นสูง สิ่งนี้สามารถเป็นประโยชน์สำหรับสถานการณ์ที่ซับซ้อนซึ่ง mockito เพียงอย่างเดียวไม่เพียงพอเช่นวิธีการเยาะเย้ยแบบคงที่หรือวิธีการส่วนตัว [9]
Mockito Mock-Maker-maker-maker
Mockito ของ `mock-maker-inline` เป็นคุณสมบัติที่แนะนำเพื่ออนุญาตให้เยาะเย้ยชั้นเรียนและวิธีการสุดท้าย ไม่จำเป็นต้องมีการจัดการด้วยไบต์เช่น Powermock แต่ใช้เครื่องมือวัด API ของ Java เพื่อแก้ไขคลาสที่รันไทม์ วิธีการนี้มีการรุกรานน้อยกว่าและไม่จำเป็นต้องมีคลาสโหลดที่กำหนดเอง [2] [8]
ในการเปิดใช้งาน `mock-maker-inline 'โดยทั่วไปคุณจะเพิ่มไฟล์ชื่อ` org.mockito.plugins.mockmaker` ด้วยเนื้อหา `mock-maker-maker-inline` ในไดเรกทอรี` src/test/ทรัพยากร/mockito-extensions` อีกทางเลือกหนึ่งคุณสามารถใช้สิ่งประดิษฐ์ `mockito-inline` ซึ่งทำให้กระบวนการง่ายขึ้นโดยไม่ต้องกำหนดค่าด้วยตนเองของไฟล์ส่วนขยาย` mockmaker` [2] [10]
Mockito 5.0.0 และรุ่นใหม่กว่าใช้ `mock-maker-inline` เป็นผู้สร้าง mock เริ่มต้นทำให้ง่ายต่อการล้อเลียนคลาสและวิธีการสุดท้ายโดยไม่ต้องกำหนดค่าเพิ่มเติม [3] [10]
ความแตกต่างที่สำคัญ
-การรุกราน: Powermock มีการรุกรานมากขึ้นเนื่องจากการใช้งานการจัดการ bytecode และ classloader ที่กำหนดเองในขณะที่ Mockito ของ `mock-maker-maker-maker-ใช้เครื่องมือ Java ซึ่งมีการรุกรานน้อยกว่า
- ความสามารถ: Powermock สามารถเยาะเย้ยวิธีการคงที่ตัวสร้างและวิธีการส่วนตัวซึ่ง Mockito ไม่สามารถทำได้หากไม่มีเครื่องมือเพิ่มเติมเช่น `mockito-inline` สำหรับชั้นเรียนและวิธีการสุดท้าย
-การกำหนดค่า: PowerMock ต้องการการกำหนดค่าเฉพาะเพื่อมอบหมายให้การใช้งาน `mockmaker` อื่น ๆ ในขณะที่` mock-maker-maker-inline 'ของ Mockito สามารถเปิดใช้งานได้ด้วยไฟล์การกำหนดค่าที่เรียบง่ายหรือโดยใช้สิ่งประดิษฐ์ `mockito-inline`
-พฤติกรรมเริ่มต้น: ใน Mockito 5 และใหม่กว่า `mock-maker-maker-inline` เป็นค่าเริ่มต้นในขณะที่ Powermock มักจะต้องมีการตั้งค่าที่ชัดเจนเพื่อใช้คุณสมบัติขั้นสูง
โดยสรุปในขณะที่ทั้ง Powermock และ Mockito `mock-maker-maker-inline` เพิ่มความสามารถในการเยาะเย้ยพวกเขาแตกต่างกันอย่างมีนัยสำคัญในวิธีการของพวกเขาการรุกรานและประเภทของการเยาะเย้ยที่พวกเขาสนับสนุน Powermock นั้นมีประสิทธิภาพมากขึ้น แต่ก็ซับซ้อนกว่าในขณะที่ `Mock-Maker-Maker Inline 'ของ Mockito นำเสนอวิธีที่ง่ายกว่าในการเยาะเย้ยชั้นสุดท้ายและวิธีการ
การอ้างอิง:[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[3] https://stackoverflow.com/questions/65986197/difference-between-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockito-core/3.2.4/org/mockito/plugins/inlinemockmaker.html
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.api.mockito.mockmaker.powermockmaker
[8] https://davidvlijmincx.com/posts/mockito_mock_final_methods_and_classes/
[9] https://stackoverflow.com/questions/6036450/PowerMock-mockito-vs-mockito-Alone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and-how-does-it-work-to-mock-final-methods