يتم استخدام كلاهما Powermock و Mockito للسخرية في Java ، لكنهما يخدمان أغراض مختلفة ولديهما ميزات مميزة ، لا سيما في كيفية تعاملهم مع تطبيقات "صانعهم".
Powermock's Mockmaker
يمتد PowerMock مكتبات وهمية أخرى مثل Easymock و Mockito من خلال توفير قدرات أكثر قوة. ويستخدم معالجة مخصصة للتصنيف ومعالجة البايت لتمكين السخرية من الأساليب الثابتة ، والمقودات ، والفئات النهائية والأساليب ، والأساليب الخاصة ، وإزالة المهيئات الثابتة [4] [9]. يتم تنفيذ "صانع النسيج" من PowerMock من قبل فئة "صانع الطاقة" ، الذي يدعو المندوب إلى "صانع نسيج آخر" إذا لزم الأمر. يتيح هذا PowerMock العمل جنبًا إلى جنب مع أطر السخرية الأخرى دون تعارض ، شريطة تكوينه بشكل صحيح [7].
نهج PowerMock أكثر توغلاً ، ويتطلب معالجة Bytecode لتحقيق قدراتها الساخرة المتقدمة. يمكن أن يكون هذا مفيدًا للسيناريوهات المعقدة حيث يكون Mockito وحده كافيًا ، مثل السخرية من الأساليب الثابتة أو الأساليب الخاصة [9].
Mockito's Mock-Inline
Mockito's `Mock-Inline" هي ميزة تم تقديمها للسماح بسخرية الفئات والأساليب النهائية. لا يتطلب معالجة Bytecode مثل PowerMock ولكن بدلاً من ذلك يستخدم واجهة برمجة تطبيقات أجهزة Java لتعديل الفئات في وقت التشغيل. هذا النهج أقل غزوًا ولا يحتاج إلى جهاز تحميل مخصص [2] [8].
لتمكين `mock-maker-inline" ، يمكنك عادةً إضافة ملف اسمه `org.mockito.plugins.mockmaker` مع محتوى" صانع النفخ-خط "في دليل" SRC/Test/Resources/Mockito-Extensions`. بدلاً من ذلك ، يمكنك استخدام قطعة أثرية `mockito-inline` ، والتي تبسط العملية من خلال عدم طلب التكوين اليدوي لملف تمديد" صانع النسيج "[2] [10].
تستخدم Mockito 5.0.0 والإصدارات الأحدث `` صانع الوهمية inline `كصانع وهمية افتراضي ، مما يجعل من السهل السخرية من الفئات والأساليب النهائية دون تكوين إضافي [3] [10].
الاختلافات الرئيسية
-الغزو: PowerMock أكثر توغلاً بسبب استخدامه لمعالجة Bytecode ومحمل فئة مخصص ، في حين يستخدم Mockito's Mock-Maker-Inline "أجهزة Java ، والتي هي أقل غزوًا.
- القدرات: يمكن لـ PowerMock أن يسخر من الأساليب الثابتة والمقدمات والأساليب الخاصة ، والتي لا يمكن لـ Mockito الاستغناء عنها بدون أدوات إضافية مثل "Mockito-Inline" للفئات والأساليب النهائية.
-التكوين: يتطلب PowerMock تكوينًا محددًا للتفويض إلى تطبيقات "صانع النسيج" الأخرى ، في حين يمكن تمكين Mockito's "Mock-Maker-Inline" مع ملف تكوين بسيط أو باستخدام القطع الأثرية "Mockito-Line".
-السلوك الافتراضي: في Mockito 5 وبعد ذلك ، فإن "Mock-Maker-Inline" هو الافتراضي ، في حين يتطلب PowerMock دائمًا إعدادًا واضحًا لاستخدام ميزاته المتقدمة.
باختصار ، في حين أن كل من Powermock و Mockito "صانع السخرية" يعزز قدرات السخرية ، فإنها تختلف اختلافًا كبيرًا في نهجها ، والغزو ، وأنواع السخرية التي يدعمونها. يعد PowerMock أكثر قوة ولكنه أيضًا أكثر تعقيدًا ، في حين يوفر Mockito's Mock-Maker-Inline "طريقة أبسط للسخرية من الفصول والأساليب النهائية.
الاستشهادات:[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]
[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-din-final-methods