Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ما هي الاختلافات بين generatemocks و generatenicemocks


ما هي الاختلافات بين generatemocks و generatenicemocks


تُستخدم التعليقات التوضيحية لـ `@generatemocks` و `@generatenicemocks` في mockito لإنشاء فصول وهمية لاختبار الوحدة في تطبيقات dart و flutter. في حين أن كلا التعليقات التعليقات التوضيحية تخدم نفس الغرض الأساسي ، إلا أنهما يختلفان بشكل كبير في سلوكهما عند التعامل مع مكالمات الأسلوب غير المحتملة.

###generatemocks

- سلوك الأساليب غير المبينة: عندما يتم استدعاء طريقة على كائن وهمية تم إنشاؤه باستخدام `@generateMocks" ولم يتم تعريف أي كعباء لهذه الطريقة ، فإن Mockito سوف يلقي استثناء. يضمن هذا السلوك أنك تحدد صراحةً كوبًا لجميع الطرق المتوقع أن يتم استدعاؤها أثناء الاختبار ، مما يساعد على الحصول على مراقبة محتملة في إعداد الاختبار.

- الاستخدام: يتم استخدام هذا التعليق التوضيحي عادةً عندما تريد تحكمًا صارمًا في سلوك السخرية الخاصة بك ، مما يضمن أن يتم وضع علامة على أي مكالمات غير متوقعة على الفور على أنها أخطاء.

- حالة الإهمال: تعتبر "@generatemocks" أقل موصى بها مقارنة بـ `@generatenicemocks" بسبب سلوكها الصارم ، مما قد يؤدي إلى مزيد من رمز اختبار المطوّل إذا لم يتم إدارته بعناية.

###generatenicemocks

- السلوك للطرق غير المليئة بالمرض: على النقيض من ذلك ، فإن السخرية التي تم إنشاؤها باستخدام `@generatenicemocks` ستعيد القيمة القانونية الافتراضية لنوع إرجاع الطريقة عندما يتم استدعاء طريقة غير معروفة. هذه القيمة الافتراضية غير مخصصة للاستخدام في منطق الاختبار ولكنها تعمل على منع أخطاء وقت التشغيل بسبب القيم الفارغة أو المفقودة.

- الاستخدام: يوصى بهذا التعليقات التوضيحية لمعظم حالات الاستخدام لأنه يبسط كتابة الاختبار عن طريق تقليل الحاجة إلى استخلاص كل استدعاء طريقة ممكنة. يجعل الاختبارات أكثر قوة من خلال تجنب الفشل بسبب كعبان منسية.

- ميزات إضافية: `@generatenicemocks" يسمح فقط بـ "MockSpec" في قائمة الوسيطة الخاصة به ، مما يوفر المزيد من المرونة في تخصيص فئات وهمية تم إنشاؤها. على سبيل المثال ، يمكنك تحديد اسم مخصص لفئة Mock باستخدام المعلمة "AS` في" MockSpec ".

الاختلافات الرئيسية

1. التعامل مع الطرق غير المليئة بالملاحظة: الفرق الأكثر أهمية هو كيفية استدعاء كل شرح مع مراعاة الطريقة دون استئصال صريح. `@generateMocks" يلقي استثناء ، في حين أن `@generatenicemocks` يعيد قيمة افتراضية.

2. رمز البساطة والمتانة: `@generatenicemocks` يؤدي عمومًا إلى رمز اختبار أبسط وأكثر قوة عن طريق تقليل الحاجة إلى القطع الشامل.

3. التخصيص: يوفر `@generatenicemocks" المزيد من خيارات التخصيص من خلال "MockSpec" ، مما يسمح بأسماء فصول وهمية مخصصة وغيرها من التكوينات المتقدمة.

باختصار ، يفضل "@generatenicemocks" عمومًا لقدرته على تبسيط رمز الاختبار وتقليل الأخطاء بسبب طرق غير مدعومة ، في حين أن `@generatemocks" يوفر نهجًا أكثر صرامة قد يكون مفيدًا في سيناريوهات محددة يكون فيها التحكم الصريح في سلوك وهمية [1] [4].

الاستشهادات:
[1] https://www.amaysim.technology/blog/flutter-test-mockito-gineratemocks-vs-generatenicemocks
[2] https://www.reddit.com/r/golang/comments
[3] https://blog.logrobent.com/unit-testing-flutter-code-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/generatenicemocks-class.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-flutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-merated-mock-class
[7] https://github.com/dart-lang/mockito/blob/master/null_safety_readme.md
[8] https://github.com/dart-lang/mockito/issues/367
[9] https://github.com/dart-lang/mockito/issues/422
[10] https://stackoverflow.com/questions/74406977/the-generatemocks-annotation-contains-a-class-hich-aspears-to-already-be-mocked
[11] https://pub.dev/packages/mockito