يعد كل من PowerMock's Whitebox و Mockito Whitebox فئات فائدة تستخدم للوصول إلى حالات الفئات الداخلية والتلاعب بها ، لكن لديهم اختلافات واضحة في أصولها ووظائفها وسياقات الاستخدام.
الأصل والتوافر
- Mockito's Whitebox: كانت هذه فئة داخلية داخل Mockito سمحت للمستخدمين بتعيين حالات داخلية للكائنات. ومع ذلك ، تمت إزالته من Mockito 2.x بسبب المخاوف بشأن تعزيز ممارسات الاختبار السيئة ولأنه لم يكن مخصصًا للاستخدام العام [11]. تم تشجيع المستخدمين الذين اعتمدوا عليها على التبديل إلى بدائل مثل PowerMock's Whitebox أو تنفيذ مرافق التأمل الخاصة بهم [3].
- PowerMock's Whitebox: هذا جزء من مكتبة PowerMock ، التي تمتد قدرات Mockito من خلال السماح بسخرية الأساليب الخاصة والثابتة والنهائية ، من بين ميزات أخرى [5]. يوفر PowerMock's Whitebox أداة انعكاس مبسطة مخصصة للاختبارات ، وتمكين الوصول إلى الأعضاء الخاصين واستدعاء الأساليب الخاصة [2] [6].
وظيفة
- Mockito's Whitebox (تاريخية): قبل إزالتها ، سمحت Mockito Whitebox للمستخدمين بتعيين حالات داخلية للكائنات باستخدام طرق مثل "setinternalstate". كان هذا مفيدًا لحقن السخرية في فصول بدون مستودعات عامة.
- PowerMock's Whitebox: يوفر مجموعة أوسع من الوظائف ، بما في ذلك:
- الوصول إلى الأعضاء الخاصين: طرق مثل "getInternalState" تسمح باسترجاع قيم المجال الخاصة.
- استدعاء الأساليب الخاصة: يمكن أن تسمي طريقة `vokemethod` الأساليب الخاصة ، بما في ذلك الطرق الثابتة [4] [10].
- تحديد الحقول الخاصة: على الرغم من عدم توثيقه بشكل صريح ، يمكن استخدام صندوق PowerMock Whitebox لتعيين الحقول الخاصة من خلال الانعكاس ، على الرغم من أن هذا ليس غرضه الأساسي.
سياق الاستخدام
- Mockito's Whitebox: نظرًا لأنه لم يعد متاحًا في Mockito 2.x ، يُنصح المستخدمون باستخدام بدائل مثل PowerMock's Whitebox أو Spring 'ResplectionTestutils` إن أمكن [1] [3].
- PowerMock's Whitebox: يتم استخدامه عادة في السيناريوهات حيث يكون الوصول المباشر إلى الأعضاء أو الأساليب الخاصة ضروريًا ، وغالبًا ما يكون ذلك في التعليمات البرمجية القديمة أو عند اختبار المنطق المعقد الذي لا يمكن إعادة تمهيده بسهولة. ومع ذلك ، يوصى عمومًا بتجنب استخدام هذه المرافق ما لم يكن ضروريًا للغاية ، حيث يمكنها تجاوز التغليف وتؤدي إلى اختبارات هشة [10].
باختصار ، على الرغم من أن كلا من الأدوات المساعدة لـ Whitebox تخدم أغراض مماثلة ، إلا أن إصدار PowerMock أكثر شمولاً ومتاحة على نطاق واسع ، في حين تمت إزالة إصدار Mockito بسبب المخاوف بشأن ممارسات الاختبار. PowerMock's Whitebox أداة قوية للوصول إلى حالات الطبقة الداخلية ومعالجتها ولكن ينبغي استخدامها بحكمة.
الاستشهادات:[1] https://stackoverflow.com/questions/40280918/what-i- use-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-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/