Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon อะไรคือความแตกต่างหลักระหว่าง Whitebox ของ Powermock และ Whitebox ของ Mockito


อะไรคือความแตกต่างหลักระหว่าง Whitebox ของ Powermock และ Whitebox ของ Mockito


WhiteBox ของ Powermock และ Whitebox ของ Mockito เป็นทั้งคลาสยูทิลิตี้ที่ใช้ในการเข้าถึงและจัดการสถานะภายในของชั้นเรียน แต่พวกเขามีความแตกต่างที่แตกต่างกันในต้นกำเนิดฟังก์ชันการทำงานและบริบทการใช้งาน

ต้นกำเนิดและความพร้อมใช้งาน

- Whitebox ของ Mockito: นี่คือคลาสภายในภายใน Mockito ที่อนุญาตให้ผู้ใช้ตั้งสถานะภายในของวัตถุ อย่างไรก็ตามมันถูกลบออกจาก Mockito 2.x เนื่องจากความกังวลเกี่ยวกับการส่งเสริมการทดสอบที่ไม่ดีและเนื่องจากไม่ได้มีไว้สำหรับการใช้งานสาธารณะ [11] ผู้ใช้ที่พึ่งพามันได้รับการสนับสนุนให้เปลี่ยนเป็นทางเลือกอื่น ๆ เช่น Whitebox ของ Powermock หรือใช้ยูทิลิตี้สะท้อนของตนเอง [3]

- WhiteBox ของ Powermock: นี่เป็นส่วนหนึ่งของ Powermock Library ซึ่งขยายความสามารถของ Mockito โดยอนุญาตให้เยาะเย้ยวิธีการส่วนตัวคงที่และสุดท้ายในหมู่คุณสมบัติอื่น ๆ [5] WhiteBox ของ Powermock ให้บริการยูทิลิตี้สะท้อนแสงที่เรียบง่ายสำหรับการทดสอบทำให้สามารถเข้าถึงสมาชิกส่วนตัวและการเรียกใช้วิธีการส่วนตัว [2] [6]

ฟังก์ชันการทำงาน

- WhiteBox ของ Mockito (ประวัติศาสตร์): ก่อนการลบ Whitebox ของ Mockito อนุญาตให้ผู้ใช้ตั้งสถานะภายในของวัตถุโดยใช้วิธีการเช่น `setinternalstate` สิ่งนี้มีประโยชน์สำหรับการฉีดยาจำลองเข้าไปในชั้นเรียนที่ไม่มีตัวตั้งค่าสาธารณะ

- Whitebox ของ Powermock: เสนอชุดฟังก์ชันที่กว้างขึ้นรวมถึง:
- การเข้าถึงสมาชิกส่วนตัว: วิธีการเช่น `getInternalstate` อนุญาตให้ดึงค่าฟิลด์ส่วนตัว
- การเรียกใช้วิธีการส่วนตัว: วิธี `invokemethod` สามารถโทรหาวิธีส่วนตัวรวมถึงวิธีการคงที่ [4] [10]
- การตั้งค่าฟิลด์ส่วนตัว: ในขณะที่ไม่ได้บันทึกไว้อย่างชัดเจน WhiteBox ของ Powermock สามารถใช้ในการตั้งค่าฟิลด์ส่วนตัวผ่านการสะท้อนแม้ว่านี่จะไม่ใช่วัตถุประสงค์หลัก

บริบทการใช้งาน

- Whitebox ของ Mockito: เนื่องจากไม่มีใน Mockito 2.x อีกต่อไปผู้ใช้จึงได้รับคำแนะนำให้ใช้ทางเลือกอื่นเช่น Whitebox ของ Powermock หรือ `ReflectionTestutils 'ของ Powermock หากมี [1] [3]

- Whitebox ของ Powermock: โดยทั่วไปจะใช้ในสถานการณ์ที่จำเป็นต้องเข้าถึงสมาชิกหรือวิธีการส่วนตัวโดยตรงมักจะอยู่ในรหัสดั้งเดิมหรือเมื่อทดสอบตรรกะที่ซับซ้อนซึ่งไม่สามารถปรับเปลี่ยนได้ง่าย อย่างไรก็ตามโดยทั่วไปขอแนะนำให้หลีกเลี่ยงการใช้ยูทิลิตี้ดังกล่าวเว้นแต่จำเป็นอย่างยิ่งที่พวกเขาสามารถข้ามการห่อหุ้มและนำไปสู่การทดสอบที่เปราะบาง [10]

โดยสรุปในขณะที่ยูทิลิตี้ WhiteBox ทั้งสองมีจุดประสงค์ที่คล้ายกันเวอร์ชันของ Powermock นั้นครอบคลุมและมีอยู่อย่างกว้างขวางมากขึ้นในขณะที่รุ่นของ Mockito ถูกลบออกเนื่องจากความกังวลเกี่ยวกับการทดสอบ Whitebox ของ Powermock เป็นเครื่องมือที่ทรงพลังสำหรับการเข้าถึงและจัดการกับสถานะชั้นเรียนภายใน แต่ควรใช้อย่างรอบคอบ

การอ้างอิง:
[1] https://stackoverflow.com/questions/40280918/ what-do-use-in-instead-of-whitebox-in-mockito-2-2-2--to-set-fields
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whitebox.html
[3] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-ten-TEN-TEN-118C52ABD1D8
[4] https://johnmullins.co
[5] https://www.calsoftinc.com/blogs/unit-testing-mockito-powermockito.html
[6] https://www.javadoc.io/doc/org.powermock/powermock-reflect/latest/org/powermock/reflect/whitebox.html
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.reflect.whitebox
[10] https://github.com/powermock/powermock/wiki/bypass-encapsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/