Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mockmaker ของ Powermock นั้นแตกต่างจากผู้ผลิต Mockito ของ Mockito อย่างไร


Mockmaker ของ Powermock นั้นแตกต่างจากผู้ผลิต Mockito ของ Mockito อย่างไร


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