عند استخدام مطابقة وسيطة Mockito على نطاق واسع ، هناك العديد من اعتبارات الأداء التي يجب وضعها في الاعتبار. على الرغم من أن Mockito فعال بشكل عام ، إلا أن الاستخدام المكثف لمطابقة الحجة يمكن أن يقدم بعض النفقات العامة بسبب طريقة عمليات Mockito لهذه المطابقات.
1.
- تقييم مطابقة الوسيطة: عندما تستخدم مطابقة الوسيطة مثل `eq ()` ، `an ()` ، أو `anystring ()` ، يحتاج Mockito إلى تقييم هذه المباراة في وقت التشغيل. يمكن لعملية التقييم هذه تقديم جزء كبير من النفقات العامة مقارنة بتمرير القيم الدقيقة مباشرة. ومع ذلك ، فإن هذه النفقات العامة عادة ما تكون ضئيلة ما لم تتعامل مع عدد كبير جدًا من الدعوات أو المباراة المعقدة.2. قواعد مجموعة المطابقة **
- يجب أن تستخدم جميع الوسائط المطابقة: إذا كنت تستخدم مطابقة وسيطة للحصول على وسيطة واحدة ، فيجب أن تستخدم جميع الوسائط المطابقة. يمكن أن تؤدي هذه القاعدة إلى مزيد من رمز المطوّل وربما أكثر أهمية إذا كنت تستخدم المطابقة لجميع الوسائط عندما يحتاج المرء فقط إلى حالة محددة. على سبيل المثال ، إذا كانت الطريقة تحتوي على ثلاث معلمات وترغب في استخدام `` أي () لأحدها ، فيجب عليك استخدام المطابقة للآخرين أيضًا ، حتى لو كان بإمكانك استخدام القيم الدقيقة.3
- المنطق المعقد: في حين يوفر Mockito مجموعة واسعة من المطاعم المدمجة ، فقد تحتاج إلى إنشاء مطابقات مخصصة لمنطق محدد. يمكن أن يكون المطابقات المخصصة أكثر تكلفة من الناحية الحسابية إذا كانت تتضمن منطقًا أو عمليات معقدة. هذا لأنها تتطلب تنفيذ واجهة `ingumentMatcher` وتحديد طريقة` Matches () `التي يمكنها إجراء عمليات فحص تعسفية.4.
- التحقق مع المطابقة: عند التحقق من التفاعلات مع الكائنات النسيلة باستخدام `التحقق ()` ، يستخدم Mockito أيضًا المطابقات للتحقق مما إذا كانت الوسيطات الصحيحة قد تم تمريرها. على غرار الذروة ، يمكن للتحقق مع المطاعم تقديم بعض النفقات العامة ، خاصة إذا كنت تتحقق من مكالمات متعددة مع المطابقة المعقدة.5. أفضل الممارسات للأداء **
- استخدم الخصوصية بحكمة: استخدم المطاعم مع المستوى الصحيح من الخصوصية. على سبيل المثال ، يكون `anyint ()` أقل تحديداً وأسرع من `eq (4)` ، ولكن باستخدام `eq (4)` عندما تحتاج إلى التحقق من قيمة معينة يكون أكثر دقة ولا يؤثر بشكل كبير على الأداء.- تجنب التعقيد غير الضروري: تجنب استخدام المطاعم المخصصة ما لم يكن ذلك لزم الأمر. إذا كان الاختبار يتطلب منطقًا معقدًا لمطابقة الوسائط ، ففكر في تبسيط الاختبار أو استخدام المطابقة الحالية بشكل خلاق.
- ملف تعريف الاختبارات الخاصة بك: إذا لاحظت مشكلات في الأداء في الاختبارات الخاصة بك ، فقم بتعريفهم لتحديد الاختناقات. من النادر أن تكون مطابقات Mockito السبب الرئيسي لمشكلات الأداء الهامة ، ولكن من الجيد دائمًا التحقق.
باختصار ، على الرغم من أن مطابقة Mockito للحجة تقدم بعض النفقات العامة ، فإن هذا ليس مصدر قلق كبير بشكل عام ما لم تكن تتعامل مع اختبارات معقدة للغاية أو حرجة للغاية. فوائد استخدام المطاعم مثل المرونة والوضوح في رمز الاختبار "عادة ما تفوق تكاليف الأداء البسيطة.
الاستشهادات:[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-matcher-vs-passing-string-directly/56572275
[2] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-any-eq
[3] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[4] https://www.softwaretestinghelp.com/mockito-matchers/
[5] https://www.toptal.com/java/a-guide-to- everyday-mockito
[6] https://github.com/etorreborre/specs2/issues/854
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.additionalmatchers
[8] https://stackoverflow.com/questions/73046134/when-hould-us- use-argument-matcher-or-passing-argument-directly-when-dicito-uni