دليل المبتدئين إلى JUnit 5

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

JUnit يمكن استخدامه لاختبار الأتمتة لغرضين رئيسيين:

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

في هذه المدونة، سنركز على التعلم والتعرف على الإعداد والتكوين والطرق الأساسية المستخدمة في JUnit 5.

ما هو JUnit 5؟

JUnit 5 هو أحدث إصدار من إطار اختبار JUnit. يدعم Java 8 والإصدارات الأحدث، ويستوعب أنماط اختبار مختلفة، ويقدم أساسًا حديثًا للاختبار من جانب المطور على JVM.

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

ميزات JUnit 5

فيما يلي بعض الميزات الشهيرة والهامة لـ JUnit 5 التي تميزه عن إطارات اختبار الوحدات الأخرى.

Feature Description Annotations/Method
مجموعة الاختبارات

مجموعة الاختبارات هي في الأساس مجموعة من الاختبارات، مثل Smoke، Sanity، أو مجموعة من الاختبارات المتعلقة بميزة معينة.

يتيح JUnit 5 إنشاء مجموعات اختبار يمكن تشغيلها معًا.

لاستخدام مجموعات الاختبارات، نحتاج إلى إضافة اعتماد JUnit Platform Suite واستخدام التعليقات التوضيحية التالية.
@SelectPackages،
@SelectClasses، @Suite
التحققات تُستخدم التحققات للتحقق من السلوك المتوقع للبرنامج. يوفر JUnit 5 طرق تحقق مدمجة يمكن أن تساعد في إجراء التحققات بسهولة. توجد طرق تحقق متعددة متاحة في import org.junit.jupiter.api.Assertions; فئة.
بعض الطرق مدرجة أدناه:
assertTrue()، assertFalse()،
assertEquals()، assertAll()، assertNotEquals()
ترتيب تنفيذ الاختبارات يخصص ترتيب تنفيذ الاختبارات. يسمح للمطور بالتحكم في تنفيذ الاختبارات وتشغيلها بترتيب محدد حسب الحاجة. @TestMethodOrder، @Order،
@TestClassOrder
اختبار الاستثناءات ينفذ اختبار الاستثناءات الذي يتحقق من أن الاستثناء المطلوب يتم إلقاؤه في الاختبار. يتم استخدام الطريقة التالية من
import org.junit.jupiter.api.Assertions;
الفئة:
assertThrows()
تبعيات الاختبار تسمح تبعيات الاختبار بالاختبار التسلسلي عن طريق توفير وسيلة للسماح لطرق الاختبار بالاعتماد على بعضها البعض. وهذا يعني أن الطريقة الاختبارية التالية، التي تعتمد على الطريقة الاختبارية السابقة، لن تتم تنفيذها ما لم تنجح السابقة. هذه ميزة مفيدة أثناء كتابة اختبارات التكامل. @TestInstance
تعطيل الاختبارات تعطيل الاختبارات أو فئات الاختبار. @Disabled
الحد الزمني يفشل الاختبار إذا تجاوزت مدة تنفيذه المحددة. @Timeout
التقارير توفر مراسل مدمج لتحليل نتائج الاختبار وعرض معلومات مفصلة. تولد ملف .html بنتائج تنفيذ الاختبار. N/A

JUnit 4 مقابل JUnit 5

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

criteria JUNIT4 JUNIT5
الهندسة المعمارية كان كل شيء معبأ معًا في ملف JAR واحد. مقسم إلى 3 مشاريع فرعية:
– منصة JUnit
– JUnit جوبيتر
– JUnit فينتاج
متطلبات إصدار JDK يتطلب Java 5 أو أعلى يتطلب Java 8 أو أعلى
تكامل الطرف الثالث لا يوجد دعم لتكامل الطرف الثالث للإضافات وواجهات الاستخدام مشروع فرعي مخصص (منصة JUnit) لتكاملات الطرف الثالث
دعم للاختبارات المتداخلة لا توجد تعليقات متاحة لكتابة اختبارات متداخلة يوفر تعليق @Nested لكتابة اختبارات متداخلة
دعم لتسجيل الإضافات المخصصة لا يوجد دعم للإضافات المخصصة يوفر تعليق @ExtendWith لتسجيل الإضافات المخصصة
التغييرات التي أجريت على التعليقات المستخدمة بشكل شائع @BeforeClass
@AfterClass
@Before
@After
@Ignore
@BeforeAll
@AfterAll
@BeforeEach
@AfterEach
@Disabled
تغييرات التعليقات لتصنيف وتصفية @Category يتم استخدامه @Tag يتم استخدامه
مجموعة الاختبارات @RunWith و @Suite تم استخدام التعليقات تُستخدم تعليقات @Suite و@SelectPackages و@SelectClasses

البدء مع JUnit 5

في هذا القسم، سنتعلم كيفية كتابة حالات اختبار JUnit 5 باستخدام بيئة IntelliJ. حيث تأتي مدمجة بـ JUnit 5 بالفعل، لذا لا داعي لتثبيت أي شيء إضافي لاستخدامها.

نحتاج إلى إنشاء مشروع Maven جديد، إضافة تبعيات JUnit 5، وبدء كتابة الاختبارات على الفور.

إضافة تبعيات JUnit في مشروع Maven

يجب إضافة التبعيات الخاصة بـ JUnit 5 التالية في ملف pom.xml:

  • JUnit Jupiter Engine
  • JUnit Jupiter API
  • JUnit Platform Suite(Aggregator)
  • JUnit Jupiter Params
XML

 

ها هو ملف pom.xml كاملاً

XML

 

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

التعليقات الأساسية المستخدمة في JUnit 5

التالي هي التعليقات الأساسية التي يستخدمها المطورون بشكل شائع أثناء كتابة الاختبارات باستخدام JUnit 5.

@BeforeAll Annotation

التعليق @BeforeAll يشير إلى أن الطريقة المُحددة يجب تنفيذها قبل أي طرق @Test، , @RepeatedTest, @ParameterizedTest, أو @TestFactory في الصنف الحالي. يجب أن تكون الطريقة ثابتة في صنف الاختبارات.

@BeforeAll يعمل كبديل لتعليق @BeforeClass المستخدم في JUnit 4.x

الصيغة:

Java

 

تعليق @BeforeEach

التعليق @BeforeEach يشير إلى أن الطريقة المُحددة يجب تنفيذها قبل كل استدعاء للطرق @Test، , @RepeatedTest, @ParameterizedTest, أو @TestFactory في الصنف الحالي.

يعد جزءًا من طرق دورة حياة الاختبار ويحل محل التعليق @Before المستخدم في JUnit 4.

الصيغة:

Java

 

تعليق @AfterAll

التعليق @AfterAll يشير إلى أن الطريقة المُحددة يجب أن تُدعى بعد تنفيذ جميع الاختبارات في الصنف الحالي. يجب أن تكون الطريقة ثابتة وتُستخدم كطريقة للتنظيف في صنف الاختبارات.

تعليق @AfterAll هو بديل لتعليق @AfterClass في JUnit 4.

الصيغة:

Java

 

تعليق @AfterEach

التعليق @AfterEach يشير إلى أن الطريقة المُحددة يجب تنفيذها بعد كل طريق @Test، , @RepeatedTest, @ParameterizedTest, أو @TestFactory في الصنف الحالي.

إنه بديل JUnit 5 لتعليق @After المستخدم في JUnit 4.

الصيغة:

Java

 

تعليق @Test

تعليق @Test يشير إلى أن الطريقة المحددة هي طريقة اختبار. يجب ألا تكون الطريقة اختبار خاصة أو ثابتة ويجب ألا تعيد قيمة.

الصيغة:

Java

 

تعليق @DisplayName

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

الصيغة:

Java

 

تعليق @Disabled

تعليق @Disabled في JUnit 5 يستخدم لاستبعاد طريقة الاختبار أو فئة الاختبار من مجموعة الاختبارات للتنفيذ.

عند تطبيقه على فئة اختبار، يُعتبر جميع الطرق داخل فئة الاختبار معطلة تلقائيًا. يحتوي هذا التعليق على معلمة اختيارية تسمح بتحديد السبب في تعطيل الاختبار.

الصيغة:

Java

 

كيفية كتابة حالات اختبار آلية باستخدام JUnit 5

حان الوقت للانتقال إلى الشفرة والبدء في العمل مع JUnit 5. سنقوم بإنشاء فئة Java جديدة، BasicTest.

Java

 


سنغطي جميع التعليقات الأساسية التي ناقشناها كجزء من العرض.

لنقوم بإضافة الأساليب في فئة BasicTest لتوضيح استخدام تعليقات @BeforeAll, @BeforeEach, @AfterAll, @AfterEach, @Test, @DisplayName و @Disabled المتوفرة في JUnit 5.

Java

 

شرح الكود

التعليق @DisplayName على فئة الاختبارات سيعرض اسم الاختبار كـ “فئة الاختبار التجريبي” في النتائج عند تنفيذ الاختبار.

الأسلوب beforeAllTest() سيتم تنفيذه قبل تشغيل أي اختبار وسيقوم بطباعة النص "تم استدعاء الطريقة قبل الكل!!". بعد ذلك، سيتم تنفيذ الأسلوب beforeEachTest() قبل كل اختبار وسيقوم بطباعة النص "تم استدعاء الطريقة قبل كل اختبار!!".

هناك ثلاثة أساليب اختبار في هذه الفئة، هي، testMethodOne(), testMethodTwo() و disabledTest(). جميع الأساليب الثلاثة للاختبارات لديها تعليق @Test فوقها، مما يشير إلى أنها أساليب اختبار.

الأسلوب disabledTest() لن يتم تنفيذه لأنه يحتوي على @Disabled تعليق موضوع فوقه.

بعد اكتمال تنفيذ كل اختبار، سيتم تنفيذ الأسلوب afterEachTestMethod() لأنه يحتوي على تعليق @AfterEach فوقه.

وأخيرًا، بعد تشغيل جميع الاختبارات، سيتم تنفيذ الأسلوب afterAllMethod() لأنه يحتوي على @AfterAll تعليق فوقه.

تنفيذ الاختبارات

يمكن تنفيذ الاختبارات عن طريق النقر بزر الماوس الأيمن على فئة الاختبار واختيار تشغيل ‘<اسم فئة الاختبار>’(“BasicTest” في حالتنا).

طريقة أخرى هي النقر على رمز التشغيل باللون الأخضر بجانب إعلان فئة الاختبار، كما هو موضح في لقطة الشاشة أدناه:



تظهر لقطة الشاشة التالية من IntelliJ IDE أن الاختبارات تم تنفيذها بنجاح.

يمكن رؤية في لقطة الشاشة أعلاه أن الاسم المعروض لفئة الاختبار قد تم طباعته، كما يمكن رؤية الاختبار المعطل أيضًا وسبب تعطيل الاختبار قد تم طباعته في وحدة التحكم.

تم تنفيذ جميع طرق الاختبار الأخرى، بما في ذلك beforetest و aftertest بنجاح، وتم طباعة النتائج المعنية على وحدة التحكم.

ملخص

JUnit 5 هو إطار اختبار قوي يستخدمه المطورون لإجراء الاختبار الوحدوي للكود. كما يستخدمه مهندسو أتمتة الاختبارات لكتابة وتشغيل نصوص أتمتة الاختبارات. يحتوي على ميزات غنية تتيح للمطورين والمختبرين كتابة نصوص الاختبار وإجراء الاختبار الوحدوي للكود.

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

سعيد بالاختبار!

Source:
https://dzone.com/articles/beginners-guide-to-junit-5