كيفية استخدامBefore وAfter في JUnit

كيفية استخدامBefore وAfter في JUnit

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





اجعل فيديو اليوم

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





نينتندو سويتش جوي كون الجمعة السوداء

التعليق التوضيحي قبل الكل

يمكن أن يكون لفصل اختبار JUnit طريقة اختبار واحدة أو أكثر. يشير التعليق التوضيحيBeforeAll إلى أنه يجب تنفيذ طريقة معينة قبل جميع طرق الاختبار في فئة الاختبار. يتم تنفيذ الطريقة المرتبطة بهذا التعليق التوضيحي مرة واحدة فقط (في بداية الاختبار) بغض النظر عن عدد طرق الاختبار في فئة الاختبار.





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

فئة الآلة الحاسبة

package com.app; 
public class Calculator {
public static int add(int num1, int num2) {
return num1 + num2;
}
public static int subtract(int num1, int num2) {
return num1 - num2;
}
public static int multiply(int num1, int num2) {
return num1 * num2;
}
public static int divide(int num1, int num2) {
return num1 / num2;
}
}

فئة الاختبار الحاسبة

import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;

@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}

@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}

@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}

@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}

@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

في هذه الفئة ، تعمل التعليقات التوضيحيةBeforeAll مع طريقة powerOnCalculator () التي تطبع 'الآلة الحاسبة قيد التشغيل' قبل أي تشغيل اختباري. يطبع تنفيذ الاختبار الناجح تقرير الاختبار التالي:



  قبل كل تقرير التعليقات التوضيحية

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

الشرحBeforeEach

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





import static org.junit.jupiter.api.Assertions.*; 
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@DisplayName("Test class demonstrating how to use the before and after annotations.")
class CalculatorTest {
@BeforeAll
public static void powerOnCalculator() {
System.out.println("The calculator is on");
}
@BeforeEach
public void clearCalculator() {
System.out.println("The calculator is ready");
}
@Test
@DisplayName("Testing method that adds two integer values.")
public void testAdd() {
assertEquals(7, Calculator.add(3, 4));
}
@Test
@DisplayName("Testing method that subtracts one integer value from another.")
public void testSubtract() {
assertEquals(6, Calculator.subtract(9, 3));
}
@Test
@DisplayName("Testing method that multiplies two integer values")
public void testMultiply() {
assertEquals(10, Calculator.multiply(5, 2));
}
@Test
@DisplayName("Testing method that divides one integer value by another")
public void testDivide() {
assertEquals(2, Calculator.divide(4, 2));
}
}

تؤدي إضافة التعليق التوضيحيBeforeEach إلى فئة CalculatorTest إلى الإخراج التالي:

  قبل كل إخراج تعليق توضيحي

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





كيفية جعل حساب gmail أساسيًا

التعليق التوضيحيAfterAll

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

@AfterAll 
public static void powerOffCalculator() {
System.out.println("The calculator is off");
}

تؤدي إضافة طريقةAfterAll المشروحة إلى فئة CalculatorTest الحالية إلى طباعة الإخراج التالي إلى وحدة التحكم:

  إخراج الشرح AfterAll

لاحظ أن طريقة powerOffCalculator () ، التي تستخدم التعليق التوضيحيAfterAll ، تطبع في نهاية فئة الاختبار ، بعد تنفيذ جميع طرق الاختبار.

التعليق التوضيحيAfterEach

التعليق التوضيحيAfterEach هو المقابل للتعليق التوضيحيBeforeEach. لديهم نفس الشروط الإلزامية ، والتي تختلف قليلاً عن تلك الموجودة في التعليقات التوضيحيةBeforeAll وAfterAll. ما يميز التعليق التوضيحيAfterEach عن التعليق التوضيحيBeforeEach (بخلاف أسمائهم) هو أن طريقةAfterEach تعمل بعد كل طريقة اختبار.

@AfterEach 
public void returnResults() {
System.out.println("The results are ready");
}

يؤدي تنفيذ فئة CalculatorTest إلى طباعة الإخراج التالي إلى وحدة التحكم:

توت العليق باي تغيير لوحة المفاتيح لنا
  AfterEach إخراج التعليق التوضيحي

يُظهر الإخراج أن الطريقة المرتبطة بالتعليق التوضيحيAfterEach (returnResults) تطبع أربع مرات. لا يحدث كل تنفيذ للأسلوب returnResults () إلا بعد تنفيذ اختبار كل وحدة. يتضح هذا من خلال حقيقة أن ناتج أسلوب returnResults () يظهر بعد كل ناتج من الطريقة المرتبطة بالتعليق التوضيحيBeforeEach.

تلميع مجموعات الاختبار الخاصة بك باستخدام التعليقات التوضيحية

تسمح لك JUnit بمعالجة العمليات غير المتعلقة بالاختبار باستخدام التعليقات التوضيحية قبل وبعد. تنتمي هذه التعليقات التوضيحية الأربعة إلى قائمة بالعديد من التعليقات التوضيحية الأخرى التي تضيف قيمة إلى اختباراتك. من التعليقات التوضيحية الأخرى لـ JUnit هيDisplayName.

يستخدم مثالا الكود اللذان يعرضان فئة CalculatorTest الكاملة التعليق التوضيحيDisplayName. يساعدك التعليق التوضيحيDisplayName على إنشاء أسماء ذات مغزى لفئات الاختبار وطرق الاختبار.