Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon كيف تحقق Mockito Moale استثناءات مختلفة من الاستثناءات التي لم يتم التحقق منها


كيف تحقق Mockito Moale استثناءات مختلفة من الاستثناءات التي لم يتم التحقق منها


تم فحص مقابض 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