JUnit حالات الاختبار @Before @BeforeClass الشرح

⚡ ملخص ذكي

JUnit يُعد إطار اختبار الوحدات الأكثر استخدامًا على نطاق واسع لـ Javaوتتحكم تعليقات تجهيزات الاختبار الخاصة بها بدقة فيما يحدث قبل وبعد تشغيل كل طريقة اختبار داخل فئة الاختبار.

  • 🔘 المباراة: بيئة الاختبار هي السياق الثابت للكائنات والموارد التي يتم تشغيل حالة الاختبار فيها.
  • ☑️ الإعداد: يتم تشغيل @Before قبل كل طريقة اختبار، بينما يتم تشغيل @BeforeClass مرة واحدة قبل الفئة بأكملها.
  • ✅ تمزيق: يتم تشغيل @After بعد كل اختبار، حتى عندما يفشل الاختبار أو التأكيد.
  • 🧪 رقم الطلب يتم تشغيل الفئة الأساسية @Before أولاً، ثم الفئة الفرعية @Before، ثم @Test، ثم كل @After.
  • 🛠️ عداء: JUnitتقوم الدالة Core.runClasses() بتنفيذ فئات الاختبار وإرجاع كائن Result يحتوي على كل حالات الفشل.
  • 📊 JUnit 5: تصبح @Before و @After و @BeforeClass و @AfterClass هي @BeforeEach و @AfterEach و @BeforeAll و @AfterAll.

JUnit مجموعة اختبار مع التعليقات التوضيحية @Before و @BeforeClass

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

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

ما هو اختبار التثبيت؟

قبل أن نفهم ما هو جهاز الاختبار، دعونا ندرس الكود أدناه.

تم تصميم هذا الكود لتنفيذ حالتي اختبار على ملف بسيط.

public class OutputFileTest {
    private File output; 
    output = new File(...);
    output.delete(); 
public void testFile1(){
        //Code to verify Test Case 1
}
    output.delete();
    output = new File(...);
public void testFile2(){
        //Code to verify Test Case 2
}
 output.delete(); 
}

بعض القضايا هنا

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

قارن نفس الكود باستخدام JUnit.

public class OutputFileTest		
{
    private File output; 
    @Before public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

الكود أكثر قابلية للقراءة والصيانة. بنية الكود المذكورة أعلاه هي جهاز اختبار.

تركيبات الاختبار هي سياق حيث أ JUnit حالة الاختبار أشواط. عادة، تشمل تركيبات الاختبار ما يلي:

  • الكائنات أو الموارد المتوفرة لأي حالة اختبار.
  • الأنشطة المطلوبة التي تجعل هذه الأشياء والموارد متاحة.
  • هذه الأنشطة هي
    1. التخصيص (الإعداد)
    2. إلغاء التخصيص (تمزيق).

الإعداد والتفكيك

المباريات مهمة لأن JUnit يتم تطبيق هذه الخطافات على كل اختبار.

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

تشبه JUnit سيتم مناقشة التعليقات التوضيحية أدناه.

اقامة

@قبل تعليق توضيحي في JUnit يستخدم على طريقة تحتوي على Java يتم تشغيل الكود قبل كل حالة اختبار، أي أنه يتم تشغيله قبل كل تنفيذ للاختبار.

التدمير (بغض النظر عن الحكم)

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

ملاحظة:

  • يُسمح بالحصول على أي عدد من التعليقات التوضيحية المذكورة أعلاه.
  • جميع الأساليب المشروحة مع @قبل in JUnit سيتم تشغيلها قبل كل حالة اختبار، ولكن قد يتم تشغيلها بأي ترتيب.
  • يمكنك توريث الدالتين @Before و @After من فئة أساسية. ويكون التنفيذ كما يلي، وهو عملية تنفيذ قياسية في JUnit.
  1. تنفيذ JUnit @قبل الأساليب في الطبقة الفائقة
  2. قم بتنفيذ الأساليب @Before في هذه الفئة
  3. قم بتنفيذ طريقة @Test في هذه الفئة
  4. قم بتنفيذ أساليب @After في هذه الفئة
  5. قم بتنفيذ أساليب @After في الفئة الفائقة

JUnit ملاحظة 5: هذه التعليقات التوضيحية هي JUnit 4 (org.junit). JUnit 5 أعادوا تسميتهم في org.junit.jupiter.api، و JUnit الكود رقم 4 أدناه لا يزال يعمل تحت محرك النظام القديم.

JUnit 4- التعليق JUnit ما يعادل 5 (كوكب المشتري) أشواط
@قبل @BeforeEach قبل كل طريقة اختبار
@بعد @AfterEach بعد كل طريقة اختبار
@قبل الفصل @BeforeAll مرة واحدة أمام الفصل بأكمله
@بعد الفصل @AfterAll مرة واحدة بعد انتهاء الفصل بأكمله
@يتجاهل @عاجز يتخطى الاختبار المشروح

مثال: إنشاء فئة باستخدام ملف كأداة اختبار

public class OutputFileTest		
{
    private File output; 
    @Before	public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

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

JUnit سلسلة تنفيذ @Before و @After حول طريقتي اختبار

  1. إنشاء ملف الإخراج ()
  2. ملف الاختبار1()
  3. حذف ملف الإخراج ()
  4. إنشاء ملف الإخراج ()
  5. ملف الاختبار2()
  6. حذف ملف الإخراج ()

افتراض:

يتم تشغيل testFile1() قبل testFile2()، وهو أمر غير مضمون.

الإعداد لمرة واحدة فقط

  • من الممكن تشغيل إحدى الطرق مرة واحدة فقط لفئة الاختبار بأكملها قبل تنفيذ أي من الاختبارات، وقبل أي منها @قبل طُرق).
  • يُعدّ "الإعداد لمرة واحدة" مفيدًا لتشغيل الخوادم، وفتح الاتصالات، وما شابه ذلك من مهام. أما إغلاق الموارد وإعادة فتحها لكل اختبار فهو أمرٌ يستغرق وقتًا طويلاً.
  • يمكن القيام بذلك باستخدام التعليق التوضيحي @قبل الفصل in JUnit.
@BeforeClass public static void Method_Name() {	
    // class setup code here	
 }	

يجب أن تكون الطريقة الفراغ الساكن العام، لان JUnit يتم استدعاؤه قبل وجود أي نسخة اختبار.

مرة واحدة فقط هدم

  • على غرار الإعداد لمرة واحدة، تتوفر أيضًا طريقة تنظيف لمرة واحدة. يتم تشغيلها بعد جميع طرق حالات الاختبار و @بعد تم تنفيذ التعليقات التوضيحية.
  • وهو مفيد للتوقفping الخوادم وإغلاق روابط الاتصال.
  • يمكن القيام بذلك باستخدام ملف @بعد الفصل حاشية. ملاحظة.
 @AfterClass public static void Method_Name()	
 {	
    // class cleanup code here	
 }	

JUnit أجنحة الاختبار

بعد وضع التجهيزات اللازمة، يتم عادةً تجميع فئات الاختبار ذات الصلة وإطلاقها معًا.

إذا أردنا تنفيذ عدة اختبارات بترتيب محدد، فيمكننا فعل ذلك بدمج جميع الاختبارات في مكان واحد. يُسمى هذا المكان مجموعة الاختبارات. لمزيد من التفاصيل حول كيفية تنفيذ مجموعات الاختبارات وكيفية استخدامها، يُرجى مراجعة [رابط غير متوفر]. JUnit يشمل هذا البرنامج التعليمي.

JUnit عداء اختبار

JUnit يوفر أداة لتنفيذ حالات الاختبار الخاصة بك.

  • JUnitجوهر يتم استخدام class لتنفيذ هذه الاختبارات.
  • طريقة تسمى runClasses التي تقدمها org.junit.runner.JUnitجوهر يستخدم لتشغيل واحد أو عدة فئات الاختبار.
  • نوع الإرجاع لهذه الطريقة هو نتيجة موضوع (org.junit.runner.النتيجةيُستخدم هذا للوصول إلى معلومات حول الاختبارات. انظر إلى مثال الكود التالي لمزيد من التوضيح.
public class Test {				
			public static void main(String[] args) {									
       		Result result = JUnitCore.runClasses(CreateAndSetName.class);					
			for (Failure failure : result.getFailures()) {							
         		System.out.println(failure.toString());					
      }		
      System.out.println(result.wasSuccessful());					
   }		
}      

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

JUnit ملاحظة 5: JUnitجوهر هي JUnit عداء رقم 4. JUnit يستبدل الرقم 5 ذلك بـ JUnit المنظومة راجمة واجهة برمجة التطبيقات (API)، التي يتم تشغيلها عادةً بواسطة بيئة التطوير المتكاملة (IDE)، Gradle أو مافن شورفاير.

الاسم الأول JUnit البرنامج

معرفة جيدة بدورة حياة تطوير البرمجيات (SDLC). Java البرمجة، وأساسيات اختبار البرمجيات تساعد هذه العملية في فهم JUnit البرنامج، وكذلك معرفة كيفية اختبارات الوحدة تختلف عن اختبارات التكامل.

دعونا نفهم اختبار الوحدات باستخدام مثال عملي. نحتاج إلى إنشاء فئة اختبار تحتوي على دالة اختبار مُعَلَّمة بـ @اختبار على النحو الوارد أدناه:

MyFirstClassTest.java

package guru99.JUnit;		

import static org.junit.Assert.*;				

import org.junit.Test;		

public class MyFirstClassTest {				

    @Test		
    public void myFirstMethod(){					
        String str= "JUnit is working fine";					
        assertEquals("JUnit is working fine",str);					
    }
}		

TestRunner.java

لتنفيذ طريقة الاختبار (المذكورة أعلاه)، نحتاج إلى إنشاء مُشغِّل اختبار. في مُشغِّل الاختبار، يجب إضافة فئة الاختبار كمعامل في JUnitدالة runClasses() في Core. ستعيد هذه الدالة نتيجة الاختبار، بناءً على ما إذا كان الاختبار ناجحًا أم فاشلاً.

لمزيد من التفاصيل حول هذا الموضوع، انظر الكود أدناه:

package guru99.JUnit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
            Result result = JUnitCore.runClasses(MyFirstClassTest.class);					
			for (Failure failure : result.getFailures()) {							
              System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

الناتج

Once Spa TestRunner.java عند تنفيذ طرق الاختبار، نحصل على نتيجة إما ناجحة أو فاشلة. تجدون أدناه شرحًا للنتيجة:

  1. في هذا المثال، بعد التنفيذ MyFirstClassTest.java، تم اجتياز الاختبار وكانت النتيجة باللون الأخضر.
  2. لو فشل البرنامج، لظهرت النتيجة باللون الأحمر، ويمكن ملاحظة الفشل في... tracهـ. انظر إلى JUnit واجهة المستخدم الرسومية أدناه:

Eclipse JUnit عرض يوضح شريط النجاح الأخضر لاختبار MyFirstClassTest

الأسئلة الشائعة

JUnit يُنشئ هذا الكود نسخة جديدة من فئة الاختبار لكل دالة اختبار، لذا لا توجد نسخة موجودة عند تشغيل الكود على مستوى الفئة. يُعرّف الكود static lets للدالة. JUnit قم باستدعائه مباشرة.

لا، ترتيب الطريقة غير محدد عمداً. JUnit 4 عروض @FixMethodOrder و JUnit 5 عروض @TestMethodOrder، ولكن اعتمادًا على ترتيب الإشارات، يتم ربط الاختبارات.

لا يتم استدعاء دالة الاختبار مطلقًا، ويتم الإبلاغ عنها كخطأ وليس كفشل. تستمر أي دالة @After في العمل، لذا يجب أن يتحمل التنظيف وجود بيانات اختبارية غير مكتملة.

ينبغي أن تضيف المشاريع الجديدة ما يلي: JUnit 5 عناصر مجمعة org.junit.jupiter:junit-jupiter. الفرق التي تحتفظ بالإصدارات القديمة JUnit تُضيف أربع مجموعات برنامج junit-vintage-engine بحيث تعمل كلتاهما على منصة واحدة.

يُشير مصطلح "التركيب" إلى السياق المُعدّ بالكامل حول الاختبار، بما في ذلك الملفات أو الاتصالات الحقيقية. أما "المحاكاة" فهي عنصر بديل ذو سلوك مُبرمج، وغالبًا ما يتم إنشاؤه بواسطة "التركيب".

نعم، من خلال @BeforeClass في JUnit 4 أو @BeforeAll في JUnit 5. تعتبر التركيبات المشتركة أسرع ولكنها تتسبب في تسريب الحالة، لذا احتفظ بها للموارد باهظة الثمن التي لا تحتاج إلى قراءة.

تقوم مساعدات الذكاء الاصطناعي بقراءة فئة، واستنتاج المتعاونين الذين تحتاجهم، وصياغة إعداد @Before مع تنظيف @After المطابق. راجع التأكيدات التي تم إنشاؤها بنفسك دائمًا.

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

تلخيص هذه التدوينة بـ: