عند استخدام PowerMock مع Mockito ، يمكن أن تنشأ العديد من المشكلات الشائعة بسبب تعقيدات التكامل. فيما يلي بعض التفسيرات التفصيلية لهذه القضايا:
إصدارات غير متوافقة
أحد التحديات الأساسية هو ضمان أن تكون إصدارات Mockito و PowerMock متوافقة. على سبيل المثال ، PowerMock الإصدار 1.7.0 RC2 متوافق مع Mockito الإصدار 2.1.0 [1] [4]. يمكن أن يؤدي استخدام الإصدارات غير المتوافقة إلى أخطاء مثل `java.lang.noclassdeffounderror` أو` java.lang.classnotfoundexception` لأن powermock يعتمد على واجهات برمجة تطبيقات mockito الداخلية التي تتغير بين الإصدارات [1] [4].ملحقات API Mockito
يتطلب PowerMock امتداد API الصحيح Mockito للعمل بشكل صحيح مع Mockito 2.x. لا يعمل امتداد `powermock-api-mockito` مع Mockito 2.x وسيؤدي إلى استثناءات مثل` java.lang.noclassdeffounderror: org/mockito/cglib/proxy/methodInterceptor`. بدلاً من ذلك ، يجب عليك استخدام `powermock-api-mockito2` لتجنب هذه المشكلات [1] [4].إزالة وايت بوكس
لم يعد Mockito 2.x يتضمن ميزة Whitebox ، والتي تم استخدامها لتحديد الحالة الداخلية للكائنات. يوفر PowerMock صندوقه الأبيض الخاص به ، ولكن استخدامه يمكن أن يؤدي إلى مشكلات مثل `org.powermock.reflect.exceptions.fieldnotfoundException`. إذا كان Bowermock's Whitebox لا يعمل من أجلك ، ففكر في كتابة تطبيقك الخاص [1] [4].تكوين Mockmaker
تنفذ Powermock الخاص به "صانع النماذج" ، والذي يمكن أن يتعارض مع "صانع الصانع الوهمي" في Mockito إذا كان كلاهما موجودًا في ClassPath. لحل ذلك ، يمكنك تكوين PowerMock للتفويض إلى Mockito's Mockmaker "من خلال إعداد` mockito.mock-maker-class = mock-maker-inline` في ملف التكوين [3].معالجة الاستثناء
عند استخدام PowerMock مع Mockito 2.x ، يتم لف استثناءات الاختبار الأصلية على أنها "RunTimeExceptionProxy`. يتطلب ذلك تعديل التعليقات التوضيحية للاختبار من `test (متوقع = someException.class)` إلى `test (متوقع = استثناء.التكامل مع الأطر الأخرى
يمكن أن تتعارض PowerMock مع الأطر أو المكتبات الأخرى ، مثل Spring أو بعض إصدارات Java ، نظرًا لتقنيات معالجة Bytecode [9]. يمكن أن يؤدي ذلك إلى تنفيذ اختبار أبطأ وتعقيد إضافي في إدارة التبعيات [9].التعقيد والأداء
تأتي الميزات المتقدمة لـ PowerMock مع زيادة التعقيد وتنفيذ الاختبار الأبطأ بسبب التلاعب بوحدة Bytecode. هذا يمكن أن يجعل الاختبارات أكثر صعوبة في الإعداد والصيانة مقارنة باستخدام Mockito وحده [9].بشكل عام ، في حين أن PowerMock يوفر إمكانيات سخرية قوية ، وخاصة بالنسبة للرمز القديم أو الأساليب الثابتة المعقدة ، فإنها تتطلب إعداد وإدارة دقيقين لتجنب مشكلات التكامل مع Mockito والأطر الأخرى.
الاستشهادات:[1] https://dzone.com/articles/mockito-2x-over-powermock-migration-top-10-tips-and-tricks
[2] https://stackoverflow.com/questions/43669909/powermock-fails-tests
[3] https://github.com/powermock/powermock/wiki/Mockito
[4] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-118c52abd1d8
[5] https://github.com/powermock/powermock/issues/811
[6] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[7] https://github.com/mockk/mockk/issues/79
[8] https://objectcomputing.com/resources/publications/sett/september-2010-mockito-integration-testing-made-easier
[9)