الغرض من اختبار الوحدة هو تحديد الأخطاء في التطبيق بأسرع ما يمكن. على الرغم من أن العديد من القنوات قد تقودك إلى نفس الهدف ، إلا أنه يجب أن تهدف إلى استخدام المسار الأكثر فاعلية.

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

توفر الوحدة 5 نهجًا أكثر كفاءة لهذه المشكلة: حقن التبعية (DI).

ما هو حقن التبعية؟

DI هو نمط تصميم حيث يوفر الكائن تبعيات كائن آخر. عندما تقوم ببناء تطبيق Java ، قد يكون لديك فئة تعتمد على كائن تنشئه فئة أخرى لأداء وظيفتها.

قبل حقن التبعية ، لاستخدام كائن من فئة مختلفة ، يجب عليك إنشاء مثيل جديد لهذا الكائن داخل الفصل الذي يعتمد عليه. لذلك ، إذا كان لديك العديد من الفئات التي تعتمد على نفس الكائن ، فسيتعين عليك إنشاء العديد من مثيلاته داخل الفئات التابعة.

يسمح لك DI باستخدام كائن في فئة تابعة ، دون إنشاء مثيل جديد منه في تلك الفئة.

حقن التبعية في الوحدة 5

instagram viewer

تسمح لك JUnit 5 بحقن التبعيات في كل من طرق الاختبار والمنشئات. هذا مهم لأن الإصدارات السابقة من إطار العمل لم تسمح لطرق الاختبار أو المنشئين بالحصول على معلمات.

تسمح لك JUnit 5 بحقن أكبر عدد تريده من المعلمات. المصيد الوحيد هو أن ParameterResolver API يجب أن تكون قادرة على حل كل معلمة في وقت التشغيل. لدى JUnit حاليًا ثلاثة أدوات حل معلمات مضمنة تستخدمها تلقائيًا. لاستخدام أي محلل آخر ، ستحتاج إلى تسجيله بشكل صريح باستخدام التعليق التوضيحيExtendWith.

حقن التبعيات في JUnit

يستخدم نموذج البرنامج هذا إحدى المعلمات المضمنة في JUnit (TestInfoParameterResolver) ، لتوضيح كيف يمكنك إدخال تبعية في اختبار JUnit 5. يحل TestInfoParameterResolver الكائنات التي تنتمي إلى واجهة TestInfo. لذلك ، ستوفر JUnit 5 مثيلًا لواجهة TestInfo لأي طريقة أو مُنشئ يستخدمها.

يستوردثابتة org.junit.jupiter.api. التأكيدات. * ؛
يستورد org.junit.jupiter.api. اسم العرض؛
يستورد org.junit.jupiter.api. امتحان؛
يستورد org.junit.jupiter.api. TestInfo ؛

فصلInfoTestInterfaceTest{
// إدخال كائن testInfo في مُنشئ InfoTestInterfaceTest
InfoTestInterfaceTest (TestInfo testInfo) {
assertEquals ("InfoTestInterfaceTest" ، testInfo.getDisplayName ()) ؛
}

// حقن كائن testInfo في طرق
@امتحان
فارغtestMethodName(TestInfo testInfo){
assertEquals ("testMethodName (TestInfo)" ، testInfo.getDisplayName ()) ؛
}

@امتحان
@اسم العرض("طريقة استخدام @اسم العرض حاشية. ملاحظة")
فارغtestMethodNameTwo(TestInfo testInfo){
assertEquals ("الطريقة التي تستخدم @اسم العرض التعليق التوضيحي "، testInfo.getDisplayName ()) ؛
}
}

يوضح اختبار JUnit أعلاه كيفية حقن كائن في المُنشئ وطريقتين. ال JUnit TestInfo تحتوي الواجهة على أربع طرق يمكنك استخدامها مع كائنها.

تعتبر طريقة getDisplayName () مفيدة للغاية. تقوم بإرجاع اسم عرض طريقة الاختبار الحالية أو المُنشئ. بشكل افتراضي ، يعتمد هذا الاسم على الفئة. ولكن إذا كنت تستخدم ملفات التعليق التوضيحيDisplayName، سترجع طريقة getDisplayName () هذا النص بدلاً من ذلك.

تنشئ فئة الاختبار أعلاه تقرير الاختبار التالي:

استخدم DI فيBefore وAfter

هناك أربعة أنواع أخرى من طرق JUnit المشروحة التي تدعم التبعيات. هذه هي التعليقات التوضيحيةBeforeAll وBeforeEach وAfterAll وAfterEach. مثل طريقةTest ، كل ما عليك فعله هو تمرير كائن إلى أي من الأساليب قبل أو بعد كمعامل ، وأنت على ما يرام.

تعد التعليقات التوضيحيةBefore وAfter مهمة ، حيث إنها تساعدك أيضًا على تطوير رمز اختبار أكثر كفاءة. إن امتلاك القدرة أيضًا على حقن التبعيات في هذه الطرق سيؤدي إلى زيادة تحسين رمز الاختبار الخاص بك.