تم فحص مقابض Mockito والاستثناءات غير المحددة بشكل مختلف ، ويرجع ذلك في المقام الأول إلى كيفية تعامل Java مع هذه الاستثناءات وكيف تم تصميم Mockito للعمل مع توقيعات الطريقة.
فحص الاستثناءات
- التعريف: الاستثناءات التي تم فحصها هي استثناءات يتم فحصها في وقت الترجمة. يجب أن يتم القبض عليهم إما في كتلة try-catch "أو إعلانها في توقيع الطريقة باستخدام الكلمة الرئيسية" رمي "[3].
- معالجة Mockito: يسمح Mockito بإلقاء استثناءات محددة من كائن وهمية فقط إذا تم إعلان الاستثناء في توقيع الطريقة. إذا حاولت رمي استثناء تم فحصه لم يتم إعلانه ، فسوف يرمي Mockito "MockitoException" مع رسالة تشير إلى أن الاستثناء الذي تم فحصه غير صالح لهذه الطريقة [1] [2]. على سبيل المثال ، إذا قامت طريقة "باطلة somemethod () بإلقاء IoException" ، فيمكنك استخدام Mockito لرمي "ioException" بدون مشاكل.
استثناءات غير محددة
- التعريف: استثناءات غير محددة هي استثناءات لم يتم فحصها في وقت الترجمة. عادة ما تكون استثناءات وقت التشغيل أو الأخطاء التي تشير إلى أخطاء البرمجة [3].
- معالجة Mockito: يمكن لـ Mockito التعامل بسهولة مع استثناءات غير محددة دون أي قيود. يمكنك استخدام `thenthrow ()` `أو` dothrow () `لمحاكاة استثناءات غير محددة مثل` runtimeexception `أو` nullpointerxception `دون الحاجة إلى إعلانها في توقيع الطريقة [1] [2]. هذا يجعل من السهل اختبار معالجة الأخطاء لظروف غير متوقعة.
الحلول للتحقق من الاستثناءات
إذا كنت بحاجة إلى رمي استثناء محدد لم يتم الإعلان عنه في توقيع الطريقة ، فيمكنك استخدام طريقة Mockito's `doanswer ()`. تتيح لك هذه الطريقة تحديد السلوك المخصص لطريقة وهمية ، بما في ذلك إلقاء الاستثناءات التي لم يتم الإعلان عنها في توقيع الطريقة [4]. ومع ذلك ، فإن هذا النهج يتطلب معالجة أكثر يدويًا وهو أقل وضوحًا بشكل عام من استخدام `thenthrow ()` أو `dothrow ()`.
باختصار ، يعد معالجة Mockito مع الاستثناءات التي تم فحصها أكثر تقييدًا لأنها تلتزم بفحوصات وقت الترجمة من Java ، في حين يمكن إلقاء الاستثناءات غير المحددة بحرية ، مما يجعلها أسهل في الاستخدام في الاختبارات.
الاستشهادات:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-This-method
[2] https://www.toptal.com/java/a-guide-to- everyday-mockito
[3]
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
[5] https://stackoverflow.com/questions/38852392/mockito-difference-between-thenthrowexception-class-and-thenthrownew-excepti
[6]
[7] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito
[8] https://www.youtube.com/watch؟v=6-gj2w2ycmi
[9] https://www.browserstack.com/guide/mockito-throw-exception